Boostを語れゴラァ part5at TECH
Boostを語れゴラァ part5 - 暇つぶし2ch222:デフォルトの名無しさん
07/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:デフォルトの名無しさん
07/12/24 09:43:23
>>219
intを出力するoperator <<は、cout (std::basic_ostream)のメンバ関数だから、
そのコードでは、正しいoperator <<へ辿り着けない。
もっとも、それ以前の問題でコンパイルエラーになっているようだが。

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

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

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

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

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

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

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

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


最新レス表示
レスジャンプ
類似スレ一覧
スレッドの検索
話題のニュース
おまかせリスト
オプション
しおりを挟む
スレッドに書込
スレッドの一覧
暇つぶし2ch