我正在将我的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。
答案 0 :(得分:1)
如果“任何类型”是指具有相同签名的所有函数对象(仿函数),那么很容易:
std::vector< std::tr1::function<void()> > someContainer;
这将创建任何不带参数的函数对象的向量,并返回void。
要调用该函数,只需将其称为常规函数对象:
(*someContainer.begin()) ();