2011-01-22 1 views
1

bind1st(mem_fun(&my_class::f), this)ファンクタをfor_eachに渡したいと思います。残念ながら、ので、私はこのようにそれをもっと読める名前を付けたいと思い読みするのが非常に困難である:自動的にbind1stのタイプを推測します(mem_fun(&my_class :: f)、this)?

(the type I am looking for) meaningful_name = bind1st(mem_fun(&my_class::f), this); 

for_each(v.begin(), v.end(), meaningful_name); 

はファンクタの種類を推定するための簡単な方法はありますか? (私はmem_funがこの理由のために私達に多くの苦痛を正確に救うことを知っています。)

答えて

4

これは、my_class:fの引数と戻り値の型によって異なります。

auto meaningful_name = bind1st(mem_fun(&my_class::f), this); 
+0

ほとんど:それは、 'mem_fun1_t'ないあるべき機能が

T my_class::f(A arg) 

であるなら、あなたはこの種のことは、C++ 0xで立派になります

binder1st<mem_fun1_t<T,my_class,A> > meaningful_name = bind1st(mem_fun(&my_class::f), this); 

が必要'mem_fun1_1'。 –

+0

@Adam:Thx、fixed – JoergB

2

いいえ簡単な方法はありません。型名はむしろ長くなり、読めなくなります。また、ブーストを使用する場合は、boost::bindを使用してローカルを必要とせずに読み取り可能なので、BOOST_AUTOを使用する必要はありません。

for_each(v.begin(), v.end(), boost::bind(&my_class::f, this)); 
関連する問題