- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在阅读Alexandrescu 的现代 C++ 设计的第三章。它解释了 HierarchyGenerators.h 的实现。 ,但是此后对该库进行了更改。
我无法理解 ScatterHierarchyTag
解决了解决 Field
中的歧义当用于生成层次结构的类型列表有重复项时,该函数允许我们访问由特定 Base<type>
定义的成员,例如 Field<int>(Object)
将为我们提供 &Base<int>
到 Object
)。 (例如: GenScatterHierarchy<TYPELIST_4(int,int,string,Widget), Base> Object
)我看到它在每个分支中添加了一个唯一的“类型/标签”,就在根 Base<type>
之前类,但仍然存在歧义,对吗?
提前谢谢您。
编辑:
图表显示类型列表中重复类型的多重继承问题。GSH = GenScatterdHierarchy
我相信对于 Base<int>
的两个连接中的每一个,唯一的标签是单独插入的(用蓝线标记)(根部的其他基类也是如此)
另外,我还插入了图片,方便大家理解。如果它不符合 stackoverflow 的指南,请告诉我,我将删除它。
最佳答案
ScatterHierarchyTag
并没有消除歧义。它的作用是使不明确的基类变得可访问。
考虑以下类层次结构:
class A {};
class B : public A {};
class C : public A, public B {};
类C
包含类 A
的两个拷贝(当 A 不为空时更有意义:),一个是因为直接继承而创建的,另一个是因为通过 B
间接继承而创建的。您可以访问转换为 B
的第二个实例第一:
A &indirect_base = static_cast<B>(C_instance);
对于另一个实例,根本无法访问它。因此,它被称为“难以到达的基地”。
此示例自然嵌入到 GenScatterHierarchy
创建的类层次结构中:
GenScatterHierarchy<int, Base>
是 A
,GenScatterHierarchy<TYPELIST_3(int,string,Widget)>
是 B
,GenScatterHierarchy(TYPELIST_4(int,int,string,Widget))
是 C
.所以,Base<int>
的实例为第一个创建int
类型列表中是不可访问的基数。但是,如果ScatterHierarchyTag
添加后,我们可以通过强制转换为 GenScatterHierarchy<ScatterHierarchyTag<int, TYPELIST_3(int,string,Widget)>, Base>
来访问它首先。
关于c++ - 洛基 C++ : How does 'ScatterHierarchyTag' solve the inheritance ambiguity?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57619476/
我正在阅读Alexandrescu 的现代 C++ 设计的第三章。它解释了 HierarchyGenerators.h 的实现。 ,但是此后对该库进行了更改。 我无法理解 ScatterHierarc
我是一名优秀的程序员,十分优秀!