std :: tr1 ::函数赋值和绑定

时间:2012-02-07 15:29:29

标签: c++ templates tr1

我正在努力学习如何最好地使用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

以上允许我成功调用我想要的功能,但我不确定这是正确的做法。问题:

  1. 上述使用方案是否“理智”?还有更好的选择吗?
  2. 上述方法在尝试绑定到返回某些内容的函数时会出现问题。如何检索返回值? (在我的愚蠢中,我厌倦了投射功能对象而没有太大的成功)

1 个答案:

答案 0 :(得分:0)

std::function的模板参数是实际的函数类型。 void()表示不带参数且不返回任何值的函数。

如果要存储返回值的函数,则必须创建新的函数对象。或者,如果您不确定该函数是否会返回某些内容,请使用boost.optional