c++ - std::tr1::函数赋值和绑定(bind)

标签 c++ templates tr1

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

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

  1. 上面的使用场景“理智”吗?有没有更好的选择?
  2. 上述方法在尝试绑定(bind)到返回值的函数时会出现问题。如何检索返回值? (在我的愚蠢中,我厌倦了转换函数对象但没有成功)

最佳答案

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

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

关于c++ - std::tr1::函数赋值和绑定(bind),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9178972/

相关文章:

c++ - 如何使专门的功能模板成为某个类的 friend ?

c++ - 为什么 clang 无法使用默认的 integer_sequence 实例化嵌套的可变参数模板?

c++ - 具有重载名称的模板化方法

c++ - 从 std::vector c++ 调用 std::function 时崩溃

c++ - 为 "abstract"父类(super class)使用复制构造函数

c++ - 为 Mac 10.9 10.11 下编译

c++ - 导致中止的未捕获异常

.net - 如何将 COM 数组传递给托管代码?

c++ - 创建 C++ std::tuple 投影函数

c++ - tr1::bind 并通过引用传递,这种行为真的是预期的吗?