提升变体和访客

时间:2017-09-10 12:43:29

标签: c++ boost

我有2个结构Base和Derived和boost:变种有2种类型。

struct Base : public boost::static_visitor<>
{
    virtual void operator(Type1& t) {}
    virtual void operator(Type2& t) {}
};

我想要做的是将Derived定义为:

struct Derived : public Base
{
    void operator(Type1& t) { /*some impl*/ }
};

我没有覆盖Type2的运算符,假设它在Base中定义并且为空。

出于某种原因,如果我写

Derived visitor;
boost::apply_visitor(visitor, variant);

我明白了 错误:无法匹配对'(派生)(Type2&amp;)'

的调用

当然,如果我将Type2的运算符添加到派生中,它可以正常工作 任何人都可以帮助理解为什么没有为Type2添加运算符它不起作用?

1 个答案:

答案 0 :(得分:3)

名称查找不考虑基类中的运算符。您需要明确地将其带入Derived的范围,以便通过名称查找来查看它:

struct Derived : public Base
{
    void operator()(Type1& t) { /*some impl*/ }
    using Base::operator();
};