使用for_each调用容器元素成员的成员函数?

Ben*_*ers 4 c++ foreach stl functor

令人困惑的标题,希望一些代码将澄清:

struct MyNestedType {
    void func();
};

struct MyType {
    MyNestedType* nested;
}

std::vector<MyType> vec;

// ... populate vec

// I want something approximating this line, but that doesn't use made-up C++!
std::for_each(vec.begin(), vec.end(), std::mem_fun_ref(&MyType::nested->func));
Run Code Online (Sandbox Code Playgroud)

所以基本上我想在容器的每个元素上调用一个方法,但它实际上并不是类型的方法,它是包含类型的一些方法...我知道我可以编写一个函数对象来"传递"调用但是有一些我想打电话的方法会变得混乱.

有任何想法吗?

Dar*_*rio 6

你为什么不用简单的for-loop?

for(vector<MyType>::iterator i = vec.begin(); i != vec.end(); ++i)
    i->nested->func();
Run Code Online (Sandbox Code Playgroud)

或者,您可以使用lambda表达式或boost :: foreach

FOREACH(MyType x, vec)
    x.nested->func();
Run Code Online (Sandbox Code Playgroud)

你可以使用binders和mem_funs构建你的up表达式,但这会变得非常混乱和混乱!将所有内容放在一个std :: foreach行中没有任何优势.