1

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

我有

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

我想把它添加到一些常见的容器中

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

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

第二个问题——如何调用容器中的函数,像这样:

someContainer.begin().invoke();

PS也许还有另一种解决方案,我对这个话题还不够了解。将感谢您的回答。

我处理 GNU C++98。

4

1 回答 1

1

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

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

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

要调用该函数,只需像普通函数对象一样调用它:

(*someContainer.begin()) ();
于 2012-05-31T16:35:01.657 回答