STL/boost方法间接调用一个方法重复为每个对象在一个向量
STL/boost way to indirectly call a method repeatly for each object inside a vector
假设我有一个对象向量。对于vector中的每个元素,我想通过成员调用函数。代码如下图所示:
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));
在每个对象上调用f()
就像上面所示的那样简单。如果我想对每个对象调用m_object->g()
呢?希望我不要为了调用m_object->g()
而改变CAnotherClass
的接口,添加一个虚拟函数。
是否有任何STL/boost方法来做到这一点,而不是自己编写循环?
您需要提供一个单独的函数,如下所示:
void call_g(CAnotherClass & c) { c.m_object.g(); }
然后传递给std::for_each
。
std::for_each(vec.begin(), vec.end(), call_g);
如果你的编译器支持lambdas (c++ 11的一个特性),情况会更好,因为你可以在函数的使用点定义它:
std::for_each(vec.begin(), vec.end(), [](CAnotherClass & c) { c.m_object.g(); });
但是如果你的编译器支持lambdas,也许它支持range for循环,这是c++ 11的另一个特性。在我看来,循环范围使std::for_each
过时。它更简洁。
for (auto & c : vec) { c.m_object.g(); }
相关文章:
- C++从另一个类访问公共静态向量的正确方法是什么
- 有没有什么方法可以使用一个函数中定义的常量变量,也可以由c++中同一程序中的其他函数使用
- 在类定义之后定义一个私有方法
- 有没有一种方法可以创建一个带有哈希表的数据库,该哈希表具有恒定时间查找功能
- 如何制作一个将函数作为参数的类方法
- 在他自己的方法中,有可能将一个对象取消引用到另一个对象吗
- 在另一个类视图中添加最多2个图表的正确方法是什么
- 检查哪个对象调用了另一个对象的对象方法
- 不能将方法返回的值用于另一个方法
- 在 c++ 中,有一种方法可以创建一个包含地图作为值的树状地图?
- std::find,返回所有找到的值的替代方法,而不仅仅是存在重复的向量的第一个值
- Qt将信号与另一个类方法连接
- C++ STD 函数运算符:有没有一种方法可以通过函数将一个向量映射到另一个向量上?
- C++有没有办法强制重写一组方法,如果其中一个方法在子类中具有重写?
- 一个模板方法,用于同时接受常量和非常量参数
- 对具有相同方法的不同类使用一个变量
- 将一个类的方法指针存储到另一个类中
- 从另一个标头中的标头调用静态方法
- 无法"this"指针传递到另一个类并在 CPP 中调用该类的任何方法
- 模板中的方法:一个有效,一个不实例化