我想知道如何实现标题中所述的内容。我尝试过像......
std::for_each( a.begin(), a.end(), std::mem_fun_ref( &myClass::someFunc ) )
但我得到一个错误,说“术语”(我假设它意味着第三个参数)不会评估为带有1个参数的函数,即使someFunc
确实采用一个参数 - 类型存储在a
。
我想知道我是否可以使用标准库(我知道我可以使用boost轻松完成)。
P.S。与仅手动迭代for_each
并将对象传递给mem_fun_ref
相比,使用a
和someFunc
是否会产生任何性能影响?
答案 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没有自己的参数吗?