对于较新的 C++ 功能,您通常会提供一个函数作为参数,例如:
// File A.cpp
void do_something(Foo* foo) { ... }
void A::process_foo(){
for_each( foo_list.begin(), foo_list.end(), do_something );
}
但是当我使用类时,我应该把函数 do_something(...)
放在哪里?我不能使它成为私有(private)成员,因为在将参数传递给 for_each 时我会丢失 this
。
所以我倾向于在我的实现文件 A.cpp 中定义一个简单的函数 do_something(...)
,就像上面的代码中给出的那样。由于这仅通过 A 的实现可见,因此我不冒命名空间污染的风险。由于其他类中的类似函数也只会在它们的实现中可见,因此我也不冒与另一个类的类似函数发生名称冲突的风险。
这是正确的方法吗?
另一个想法是使用 Lambda。我对 Lambdas 不是很熟悉,所以我不知道我应该尽可能多地使用它们还是只有在绝对必要时才使用它们......
最佳答案
std::for_each
的第三个参数需要是函数或带有一个参数的函数对象,例如它可以用 for_each 的前两个参数定义的范围内的元素调用
。然后你有以下选项(假设 foo_list
存储 Foo*
):
使用正则函数
void do_someting(Foo*){...}
for_each(..., do_something);
你可以把函数放在任何合适的地方。如果这是供本地使用,匿名命名空间是最佳选择。但它可能是例如在单独的编译单元中定义。
使用静态方法
static void do_something(Foo*){...}
for_each(..., &Foo::do_something);
请注意,它不一定是 Foo
的静态方法。
使用 lambda
for_each(...,[](Foo* f){...});
使用 Foo 类的方法(甚至是私有(private)的)和 std::bind
void method(){...}
for_each(..., std::bind(&Foo::method, _1));
还有其他选项,但这些是最常见的。
关于c++ - 将 for_each 调用的函数放在类中的什么位置?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24907222/