我正在努力学习如何最好地使用std :: function和std :: bind工具 在标准库中 - 我对TR1版本感兴趣,因为那就是我 现在可用,我不知道TR1实现和C ++ 11实现之间的差异,如果有的话。
因此,为了练习,我已经建立了一个简单的让我们说“调度员”。 我想要的是能够根据稍后在运行时作出的一些决定从调度程序执行任何功能。我将我的类设置为具有通用功能数据 会员喜欢这样:
class PoorDispatcher
{
...
private:
std::tr1::function<void()> m_f;
}
然后我为数据成员分配我真正想要调用的函数,类似于下面的
...
m_f = std::tr1::bind(some_func, param1, param2, param3);
...
// then the call
m_f(); // SUCCESS
以上允许我成功调用我想要的功能,但我不确定这是正确的做法。问题:
答案 0 :(得分:0)
std::function
的模板参数是实际的函数类型。 void()
表示不带参数且不返回任何值的函数。
如果要存储返回值的函数,则必须创建新的函数对象。或者,如果您不确定该函数是否会返回某些内容,请使用boost.optional。