提升变体和访客
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();
};
相关文章:
- 在访客模式中组合访客
- 隐藏重载虚拟功能的模板化访客:SFINAE 在使用?
- C++提升::获取和访客
- 如何消除访客模式冗余?
- 虚拟模板函数:使用参数实现访客模式
- 究竟发生了什么,我们需要在 c++ 中双重调度/访客
- 访客设计模式和多层类层次结构
- VirtualBox访客添加汇编
- 具有不同返回类型的变体访客
- 基类中的访客模式
- 提升::访客操作员过载的变体"Error: no match for call to [...]"
- 为什么在 BGL 中的访客中无法更改边缘属性?
- 非周期访客C++
- C++ 访客模式与子类节点上的访客失去"is a"关系
- 访客模式适用于shared_ptr或原始指针?
- 提升变体和访客
- Lambdas的多态性访客
- 工厂返回提升::访客对象
- 提升的访客模式::任何
- 从服务应用程序访问访客帐户系统注册表