6

我正在尝试理解以下代码。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;
};
4

4 回答 4

6

这是Member Detector Idiom的一个实现。它使用SFINAE检查类型 T 是否有一个名为 的成员flow

编辑:您要问的逗号部分是多重继承。Struct Derived 是(公开)从T 和 Fallback继承的

于 2012-12-26T12:53:01.273 回答
2

这只是多重继承。以下是Derived源自T(并且没有提供进一步定义)的 a:

struct Derived : T { };

以下是DerivedT和派生的 a Fallback

struct Derived : T, Fallback { };

即,Derived将继承 的成员T 的成员Fallback。在这种情况下,因为Derived是一个结构,所以默认情况下继承是公共继承

于 2012-12-26T12:53:36.580 回答
1

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

于 2012-12-26T12:54:27.407 回答
1

它的意思是:

在 的定义中has_FlowTraits struct,您还定义了一个struct名为Derived.

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

简单的{}意思是没有更多的实现细节。不需要更多的方法或属性定义来使这种类型有用。

于 2012-12-26T12:54:55.813 回答