假设我有一个对象向量.对于向量内的每个元素,我想通过成员调用一个函数.代码可以如下所示.
class CMyClass
{
public:
void g();
};
class CAnotherClass
{
public:
void f();
CMyClass m_object;
};
std::vector<CAnotherClass> vec;
// This is easy. What about m_object->g()?
std::for_each(vec.begin(), vec.end(), std::mem_fn(&CAnotherClass::f));
Run Code Online (Sandbox Code Playgroud)
调用f()每个对象就像上面显示的那样简单.如果我想调用m_object->g()每个对象怎么办?希望我不想改变界面CAnotherClass来添加一个虚拟函数来调用m_object->g().
是否有任何STL/boost方式来自己编写循环?
你需要提供一个单独的功能,如下所示:
void call_g(CAnotherClass & c) { c.m_object.g(); }
Run Code Online (Sandbox Code Playgroud)
然后传递给std::for_each.
std::for_each(vec.begin(), vec.end(), call_g);
Run Code Online (Sandbox Code Playgroud)
如果你的编译器支持lambdas,一个C++ 11特性,事情会更好,因为你可以在它的使用点定义函数:
std::for_each(vec.begin(), vec.end(), [](CAnotherClass & c) { c.m_object.g(); });
Run Code Online (Sandbox Code Playgroud)
但是如果你的编译器支持lambdas,也许它支持range for loops,另一个C++ 11特性.在我看来,循环的范围std::for_each已经过时了.它更简洁.
for (auto & c : vec) { c.m_object.g(); }
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
164 次 |
| 最近记录: |