我正在将函子的实现转换为std::tr1::function
(原因是在我的实现中,我们需要为每个函数类型预定义类型和函子类,我想将其扩展到任何函数)。
我有
int param = 1;
std::tr1::bind (&MyClass::func, param);
我想把它添加到一些常见的容器中
someContainer.insert (std::tr1::bind (&MyClass::func, param));
那么,如何声明容器,它必须是什么类型才能接受任何类型的函数呢?有可能吗?
第二个问题-如何调用容器中的函数,如下所示:
someContainer.begin().invoke();
附言:也许还有另一种解决方案,我对这个话题还不够了解。感谢你的回答。
我处理GNU C++98。
如果你所说的"任何类型"是指所有函数对象(函子)都有相同的签名,那么很容易:
std::vector< std::tr1::function<void()> > someContainer;
这将创建任何函数对象的向量,该向量不接受参数并返回void。
要调用函数,只需像常规函数对象一样调用它:
(*someContainer.begin()) ();