C++:七転八倒記(bindのプレースホルダ)

もういっちょ行きます。

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 コメント: