もういっちょ行きます。
std::tr1::bindはとても便利です。一度使うと無しには生きられません。
#単相lambdaが出来れば無くても・・・?
で、bindの強力な機能に"プレースホルダ"というのがあります。
ま、要は関数の引数の一部を束縛せずにおいて置くという機能です。
#先の投稿で"_1"とやってるところがそれです。
さて。さてさて。
VC2008sp1において、bindはstd::tr1名前空間にあります。
一方、プレースホルダは、std::tr1::placeholders名前空間にあります。
これでナニが起きるかというと・・・ADLが利かなくなるんデスねーーー。
boostにおいては、プレースホルダがboost名前空間にあったため、
boost::bind( std::minus< int >(), _1, 100 );
と書くことが出来ました。うむうむ。超便利。
ですが。これがVC2008sp1ではどうなるかというと。
std::tr1::bind( std::minus< int >(), std::tr1::placeholders::_1, 100 );
(;゚ Д゚) …!?
せんせー帰っても良いですか?
using namespace std;
using namespace std::tr1;
としても、事情はあんまりよくなりません。
bind( minus< int >(), placeholders::_1, 100 );
(ノ`Д´)ノ彡┻━┻責任者デテコーイ!
0 コメント:
コメントを投稿