std :: tr1 :: function - 在普通容器中存储各种类型的函数对象

时间:2012-03-02 14:11:25

标签: c++ function std functor c++98

我正在将我的functor实现转换为std::tr1::function(原因是我的实现需要为每个函数类型预定义类型和函数类,我想扩展它以适用于任何函数)。

我有

int param = 1;
std::tr1::bind (&MyClass::func, param);

我希望将其添加到一些常见容器

someContainer.insert (std::tr1::bind (&MyClass::func, param));

那么,如何声明容器,接受任何类型的函数必须是什么类型?它有可能吗?

第二个问题 - 如何在容器中调用函数,如下所示:

someContainer.begin().invoke();

P.S。也许有另一个解决方案,我在这个主题中不够了解。会感谢答案。

我处理GNU C ++ 98。

1 个答案:

答案 0 :(得分:1)

如果“任何类型”是指具有相同签名的所有函数对象(仿函数),那么很容易:

std::vector< std::tr1::function<void()> >  someContainer;

这将创建任何不带参数的函数对象的向量,并返回void。

要调用该函数,只需将其称为常规函数对象:

(*someContainer.begin()) ();