带有1个参数的成员函数的std :: for_each

时间:2010-04-04 02:14:01

标签: c++ foreach std

我想知道如何实现标题中所述的内容。我尝试过像......

std::for_each( a.begin(), a.end(), std::mem_fun_ref( &myClass::someFunc ) )

但我得到一个错误,说“术语”(我假设它意味着第三个参数)不会评估为带有1个参数的函数,即使someFunc确实采用一个参数 - 类型存储在a

中的对象

我想知道我是否可以使用标准库(我知道我可以使用boost轻松完成)。

P.S。与仅手动迭代for_each并将对象传递给mem_fun_ref相比,使用asomeFunc是否会产生任何性能影响?

2 个答案:

答案 0 :(得分:2)

尽管someFunc是一个带有一个参数的成员,但mem_fun_ref使用隐含的第一个参数“myClass”。你想使用vector的项作为第二个参数。

使用for_each和mem_fun_ref可能没有负面的性能影响。编译器将生成可比较的代码。但是,唯一的方法是确定基准:)

  std::for_each(a.begin(), a.end(),
                std::bind1st(
                    std::mem_fun_ref( &MyClass::SomeFunc ),
                    my_class ));

答案 1 :(得分:1)

我认为你需要使用bind_1st来提供隐藏的“this”参数。或者你的意思是“this”参数是唯一的,someFunc没有自己的参数吗?