【问题标题】:How to detect if a boost::function is pure virtual?如何检测 boost::function 是否是纯虚拟的?
【发布时间】:2013-05-01 17:18:51
【问题描述】:

我有一个使用线程的任务池,它试图调用一个 boost::function 恰好是纯虚拟的,没有实现。

有这样的吗?

void doStuff(boost::function<void()> foo) 
{
    if (!foo.pure_virtual) 
    {
        foo();
    }
}

注意:这与foo.emptyif (foo) { } 不同。 .empty API 似乎没有检测到该方法的纯虚拟性。

【问题讨论】:

  • 您能否提供一个“恰好是纯虚拟的 boost::function”的具体示例?
  • 您是如何设法实例化一个包含纯虚函数的类的?听起来您从不应该在的某个地方调用doStuff()(例如,从继承层次结构中类的构造函数或析构函数中)。
  • 纯虚指向 null 不?另一件事是你必须将函数绑定到一个对象,而这对于纯虚拟是不可能的

标签: c++ boost pure-virtual boost-function


【解决方案1】:

你无法检测到它,而且你一开始就不应该把它放在那里!

【讨论】:

  • * 同意它一开始就不应该发生。谢谢你的例子。
  • "// 这不会进行虚拟调度" --- 这句话是错误的。你试过运行你的代码吗?
  • @bitcycle:这对你来说可能没问题,但答案建立在错误的假设之上,实际上是不正确的。 boost::bind(&amp;Foo::f, &amp;foo)(); 在这种情况下进行虚拟调度。
  • 哇,我确信它不会虚拟发送,但你们是对的!我删除了错误的位。本来会删除答案,但不能因为它被接受了。
猜你喜欢
  • 2014-05-19
  • 2019-07-01
  • 2011-03-01
  • 1970-01-01
  • 2017-05-24
  • 2019-12-05
  • 2010-10-21
  • 1970-01-01
相关资源
最近更新 更多