我在地图中有一组对象指针,在几个地方我需要遍历该集合并调用每个对象的成员函数。
目前,对于每个成员函数,我需要在集合中的每个元素上调用,我正在添加一个代理函数,该函数迭代调用关联成员的集合。
我想知道是否可以使用 boost 在集合类中创建一个模板函数,它会在一般情况下为我处理这个问题?
回答:事实证明这很容易,修改了我原来的例子,使其按需要工作:
class Object
{
public:
void func1();
void func2(int a);
};
class ObjectCollection : public std::map<std::string, Object*>
{
public:
template <typename Func>
void invokeMember(Func func)
{
for (iterator it = begin(); it != end(); ++it)
{
it->second->func();
}
}
};
void test()
{
ObjectCollection collection;
// ...
collection.invokeMember(boost::bind(&Object::func1, _1));
collection.invokeMember(boost::bind(&Object::func2, _1, 42));
}