c++模板和派生类

C++ templates and derived classes

本文关键字:派生 c++      更新时间:2023-10-16

我试图理解以下代码。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 { };

下面是由TFallback衍生的Derived:

struct Derived : T, Fallback { };

即,Derived将继承T 的成员,而继承Fallback的成员。在本例中,由于Derived是一个结构体,继承默认为公共继承

意思是:

has_FlowTraits struct的定义中,还定义了一个新的struct,称为Derived

你说这个结构体Derived继承了类型T和类型Fallback。(如果你看之前的行,struct Fallback刚刚被定义)。

{}仅仅意味着没有更多的实现细节。此类型不需要更多的方法或属性定义,

逗号表示它从这两个类公开或私下派生(取决于TFallback是结构体还是类)。逗号只是将这些类包括为Derive将派生的类。