C++模板和派生类

use*_*610 6 c++ templates derived

我想了解以下代码.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;
};
Run Code Online (Sandbox Code Playgroud)

jro*_*rok 6

这是Member Detector Idiom的一个实现.它使用SFINAE来检查类型T是否有一个被调用的成员flow.

编辑:您要问的逗号部分是多重继承.结构派生的(公开)继承两个 T和回退.