我有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添加运算符它不起作用?
答案 0 :(得分:3)
名称查找不考虑基类中的运算符。您需要明确地将其带入Derived
的范围,以便通过名称查找来查看它:
struct Derived : public Base
{
void operator()(Type1& t) { /*some impl*/ }
using Base::operator();
};