[表示 : 全て 最新50 1-99 101- 201- 2chのread.cgiへ]
Update time : 05/26 12:43 / Filesize : 65 KB / Number-of Response : 227
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

Boostを語れゴラァ part5



1 名前:BOOTS [2007/10/18(木) 08:09:35 ]
語って.はぁと part boost::mpl::int_<5>

過去スレ
part 4 pc11.2ch.net/test/read.cgi/tech/1175663346/
part 3 pc11.2ch.net/test/read.cgi/tech/1158991211/
part 2 pc8.2ch.net/test/read.cgi/tech/1139313234/
part 1 pc8.2ch.net/test/read.cgi/tech/1091198276/

■関連サイト■
Boost C++ Libraries
www.boost.org/

Boost 翻訳プロジェクト
boost.cppll.jp/HEAD/

Let's Boost
www.kmonos.net/alang/boost/

boost info
shinh.skr.jp/boost/

213 名前:デフォルトの名無しさん mailto:sage [2007/12/23(日) 17:06:19 ]
>>212
char*やイテレータを取るバージョンがあるはずだが

214 名前:デフォルトの名無しさん mailto:sage [2007/12/23(日) 18:15:20 ]
>>213
以前のバージョンということですか?
できればxpressiveで書きたいので、最近のバージョンを使いたいのですが
それでは無理ってことでしょうか

215 名前:デフォルトの名無しさん mailto:sage [2007/12/23(日) 18:34:45 ]
バージョンと言うかオーバーロードな
と言うかリファレンス見たら?

216 名前:デフォルトの名無しさん mailto:sage [2007/12/23(日) 22:54:20 ]
>>215
つ 特殊化

217 名前:デフォルトの名無しさん mailto:sage [2007/12/23(日) 23:22:28 ]
つか入力にイテレータ取るバージョンがあれば当然ポインタ食わせられるだろ。

218 名前:デフォルトの名無しさん mailto:sage [2007/12/23(日) 23:55:17 ]
sregexがstd::string版なら、cregexがconst char*版。
Xpressiveでは、イテレータの型をテンプレート引数で指定する。
boost.org/doc/html/xpressive/reference.html#header.boost.xpressive.xpressive_fwd.hpp

219 名前:デフォルトの名無しさん [2007/12/24(月) 08:12:02 ]
std::vector<int> v;
v.push_back(1);
v.push_back(2);
v.push_back(3);
std::for_each(v.begin(), v.end(),
boost::bind(operator<<, std::cout, _1));

このようにして各要素を出力することはできないのでしょうか?
なぜだか error C2065: '<<' : undeclared identifier
と言われてコンパイルできません.


220 名前:219 [2007/12/24(月) 08:54:23 ]
boost::bind に関するこのコードでなぜ最後のコメント部分の
コンパイルが通らないのでしょうか?
pastebin.windy.cx/?page=view&id=1198454028

221 名前:デフォルトの名無しさん mailto:sage [2007/12/24(月) 09:25:58 ]
コンパイルできない理由はちょっとわからんけど、これじゃダメなん?
std::copy(v.begin(), v.end(), std::ostream_iterator<int>(std::cout));



222 名前:デフォルトの名無しさん mailto:sage [2007/12/24(月) 09:38:51 ]
>>220
g++だと<unresolved overloaded function type>と言われたのでstatic_castしたら通った。
std::for_each(v.begin(), v.end(), boost::bind(
    static_cast<A &(A::*)(int)>(&A::operator =),
    &a,
    _1));

223 名前:デフォルトの名無しさん mailto:sage [2007/12/24(月) 09:43:23 ]
>>219
intを出力するoperator <<は、cout (std::basic_ostream)のメンバ関数だから、
そのコードでは、正しいoperator <<へ辿り着けない。
もっとも、それ以前の問題でコンパイルエラーになっているようだが。

今回は221のいうとおりostream_iteratorもあるし、
その他演算子一般の場合は、bind使えなくてもlambdaがある。

224 名前:219 mailto:sage [2007/12/24(月) 09:48:19 ]
>>221
いや,もちろんそれでやりたいこととしてはOKなんですが,
一般的な演算子を指定できれば応用範囲も広がるかなと思って.

>>222
VC9 だとテンプレートを検索しまくって
「あれでもない,これでもない」と C2780 を連発した揚句,
時々 ambiguous だというエラーも出るんですよ.

なるほど, g++ でもそのままでは通らなくて,
static_cast すれば通るんですね. operator() だと問題なくて
operator= だと問題になる理由がわからないですが.
既定の代入演算子が別途用意されてしまうからかなぁ.
自前で = をオーバーロードした時って既定の = は
定義されないんでしたっけ?

でも独自にコンストラクタを作ってもコピーコンストラクタは
勝手に作られていたような気がする.

225 名前:219 mailto:sage [2007/12/24(月) 09:51:05 ]
>>223
なるほど,それで operator<< が見つからないと怒られてるんですね.
たぶんグローバル名前空間の operator<< を探しに行って「無い」
と怒ってるように思います.

自分はてっきりストリームの << 演算子はグローバル名前空間に
定義されていて必要なクラスに friend 指定されているのだと
思っていました.

226 名前:デフォルトの名無しさん mailto:sage [2007/12/24(月) 11:35:14 ]
>>224
boost::bindはlambdaと違って一旦メンバーポインタにするから。
だからoverloadされてるとまずい。






[ 新着レスの取得/表示 (agate) ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧](*・∀・)<65KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef