【问题标题】:Implement no-op functor using boost::bind使用 boost::bind 实现无操作函子
【发布时间】:2011-10-24 11:00:38
【问题描述】:

我有一个函数void get(boost::function<void(void)> callback) { callback(); }。 我想在不实现任何其他函数、变量或结构的情况下进行类似get(boost::bind(/* don't know what to put here*/)); 的调用,因此回调什么也不做。 是否可以在 C++03 中实现这样的“无操作”回调?

boost::bind() 的使用是首选但不是必需的 - 可能是,还有一些其他技巧可以实现我的目标。

【问题讨论】:

  • 为什么不直接使用无操作函数,即void noop() {}
  • @JoachimPileborg,因为这意味着实现一个功能,OP 明确希望避免这种功能。
  • ... 或在酷炫的 C++11 中:[](){}
  • @avakar:Joachim 质疑不实现简单 noop 函数的理由。
  • @avakar:“为什么不呢?”仍然是一个好问题。如果 OP 有一个奇怪的限制,那么他可能还有其他限制,因此了解限制来自哪里会有所帮助。

标签: c++ boost-bind boost-function


【解决方案1】:

可以使用boost::bind(std::plus<int>(), 0, 0)之类的东西,它应该被优化到什么都没有。

如果您放宽限制并改为定义无操作函子,这将使代码更加清晰。

【讨论】:

  • function<int(void)> 是否隐式转换为 function<void(void)>
  • @SteveJessop:或多或少。 function<void(void)> 可以接受不带参数但恰好返回值的函数对象。
  • @SteveJessop: Yes(或者至少,可以将返回值的仿函数转换为不返回值的boost::function)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-07-21
  • 2014-06-11
  • 1970-01-01
  • 2011-02-08
  • 2016-03-16
  • 2011-01-01
  • 1970-01-01
相关资源
最近更新 更多