我有2种结构,基本和派生,以及boost:variant有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中定义并且为空,则我不会覆盖Type2的运算符。

由于某种原因我写
Derived visitor;
boost::apply_visitor(visitor, variant);

我懂了
错误:对“(派生)(Type2&)”的调用不匹配

当然,如果我将Type2的运算符添加到派生中就可以了。
任何人都可以帮助了解为什么不添加Type2运算符就无法正常工作吗?

最佳答案

名称查找在基类中不考虑运算符。您需要将其显式引入Derived的范围内,以便通过名称查找将其看到:

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

关于c++ - boost 变体和访客,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/46140813/

10-10 11:29