c++模板和派生类
C++ templates and derived classes
我试图理解以下代码。Derived是T的派生结构","是什么意思然后是Fallback {}
template <class T>
struct has_FlowTraits<T, true>
{
struct Fallback { bool flow; };
struct Derived : T, Fallback { }; //What does it means ?
template<typename C>
static char (&f(SameType<bool Fallback::*, &C::flow>*))[1];
template<typename C>
static char (&f(...))[2];
public:
static bool const value = sizeof(f<Derived>(0)) == 2;
};
这是成员检测器习惯用法的实现。它使用SFINAE检查类型T是否有一个名为flow
的成员。
编辑:你问的逗号部分是多重继承。Struct Derived(公开地)继承了 T和Fallback
这就是多重继承。以下是由T
衍生而来的Derived
(没有提供进一步的定义):
struct Derived : T { };
下面是由T
和Fallback
衍生的Derived
:
struct Derived : T, Fallback { };
即,Derived
将继承T
的成员,而继承Fallback
的成员。在本例中,由于Derived
是一个结构体,继承默认为公共继承。
意思是:
在has_FlowTraits struct
的定义中,还定义了一个新的struct
,称为Derived
。
你说这个结构体Derived
继承了类型T和类型Fallback
。(如果你看之前的行,struct Fallback
刚刚被定义)。
{}
仅仅意味着没有更多的实现细节。此类型不需要更多的方法或属性定义,
逗号表示它从这两个类公开或私下派生(取决于T
或Fallback
是结构体还是类)。逗号只是将这些类包括为Derive
将派生的类。
相关文章:
- 为什么使用 "this" 指针调用派生成员函数?
- 具有奇怪重复模板模式的派生类中的成员变量已损坏
- 在派生函数中指定void*参数
- 如何通过派生类函数更改基类中的向量
- 如何委托派生类使用其父构造函数?
- 如何使用单独文件中的派生类访问友元函数对象
- 派生类销毁的最佳实践是什么
- 如何使用基类指针引用派生类成员
- 派生类是否可以在抽象工厂设计模式中具有数据成员
- 使用基类指针创建对象时,缺少派生类析构函数
- 如何引用基类的派生类?
- 存储模板类型以强制转换回派生<T>
- 需要从 istream 和 ostream 派生 iostream
- 在 C++ 中用派生类型重写成员函数
- 具有多个类、派生类的C++正向声明
- 有没有一种"cleaner"的方法可以在指向基的指针向量中找到派生类的第一个实例?
- 用常见虚拟函数实现的任意组合来实现派生类的正确方法是什么
- 如果基类包含双指针成员,则派生类的构造函数
- 为什么此派生对象无法访问基类的后递减方法?
- 有没有比在库中添加一个并非由所有派生类实现的新虚拟函数更好的设计实践