我正在尝试学习如何最好地使用 std::function 和 std::bind 工具 在标准库中——我对 TR1 版本感兴趣,因为我就是这样 目前可用,我不知道 TR1 实现和 C++11 实现之间的差异(如果有的话)。
因此,为了练习的缘故,我已经开始构建一个简单的“调度程序”。 我想要的是能够根据稍后在运行时做出的一些决定从调度程序执行任何功能。我将我的类(class)设置为具有通用功能数据 成员这样:
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
以上允许我成功调用我想要的功能,但我不确定这是正确的做法。问题:
- 上面的使用场景“理智”吗?有没有更好的选择?
- 上述方法在尝试绑定(bind)到返回值的函数时会出现问题。如何检索返回值? (在我的愚蠢中,我厌倦了转换函数对象但没有成功)
最佳答案
std::function
的模板参数是实际的函数类型。 void()
表示一个不接受任何参数且不返回任何值的函数。
如果你想存储一个返回值的函数,你必须创建一个新的函数对象。或者,如果您不确定该函数是否会返回某些内容,请使用 boost.optional .
关于c++ - std::tr1::函数赋值和绑定(bind),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9178972/