2011-01-22 32 views
1

我想通過bind1st(mem_fun(&my_class::f), this)仿函數到for_each。不幸的是它是非常難讀,所以我想給它一個更readible名字是這樣的:自動推斷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。如果函數

T my_class::f(A arg) 

,那麼你需要

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

這種事情會使用C++更好0X:

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

差不多:它應該是`mem_fun1_t`,不`mem_fun1_1`。 – 2011-01-22 16:50:48

2

不,沒有簡單的方法。類型名稱會相當長,甚至更難讀。如果你使用boost,你不需要使用BOOST_AUTO,因爲你可以使用boost::bind並且可讀,而不需要本地的。

for_each(v.begin(), v.end(), boost::bind(&my_class::f, this));