提升变体和访客

Boost variant and visitor

本文关键字:访客      更新时间:2023-10-16

i具有2个结构基础,并得出和增强:具有2种类型的变体。

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

我想做的是将派生的定义为:

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

i不覆盖type2的操作员,假设它是在基础中定义的,并且是空的。

由于某种原因,如果我写

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

我得到错误:呼叫"(派生)(type2&amp;)'

无匹配

当然,如果我将type2的运算符添加到派生中,则可以正常工作。
任何人都可以帮助理解为什么如果不添加type2的操作员?

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

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