我想将bind1st(mem_fun(&my_class::f), this)
仿函数传递给for_each
。不幸的是,它很难阅读,所以我想给它一个更可读的名字:
(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
正是因为这个原因而给我们带来了很多痛苦。)
答案 0 :(得分: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);
答案 1 :(得分:2)
没有简单的方法。类型名称将相当长,甚至更难以理解。如果你使用boost,你不需要使用BOOST_AUTO
,因为你可以使用boost::bind
并让它可读,而不需要本地。
for_each(v.begin(), v.end(), boost::bind(&my_class::f, this));