对于较新的C++功能,你经常给一个函数作为参数,例如:将for_each调用的函数放在类中的位置?
// File A.cpp
void do_something(Foo* foo) { ... }
void A::process_foo(){
for_each(foo_list.begin(), foo_list.end(), do_something);
}
但我应该在哪里居然把功能do_something(...)
时,我连班工作?我不能让它成为私人成员,因为在将参数传递给for_each时,我会松动this
。
所以我倾向于在我的实现文件A.cpp中定义一个普通函数do_something(...)
,就像上面代码中给出的一样。由于这仅通过实施A可见,所以我不会冒名称空间污染的风险。由于其他类中的类似函数也只能在其实现中可见,因此我也不会冒险与另一类的类似函数发生名称冲突。
这是正确的方法吗?
另一个想法是使用Lambda。我对Lambdas不是很熟悉,所以我不知道我是应该尽可能多还是仅仅在绝对必要时使用它们...
兰姆达斯很容易,当你知道如何。 ''for_each(foo_list.begin(),foo_list.end(),[](Foo * foo){foo-> something();});' –
也许你正在寻找'Foo * '?如果你愿意的话,这也可能是“私人”的。使用'std :: bind'的 – nwp
将允许'do_something'为私有的... – Theolodis