自动推断bind1st的类型(mem_fun(& my_class :: f),这个)?

时间:2011-01-22 16:29:09

标签: c++ templates stl functional-programming functor

我想将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正是因为这个原因而给我们带来了很多痛苦。)

2 个答案:

答案 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));