std::tr1::将各种类型的函数对象存储在公共容器中



我正在将函子的实现转换为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()) ();