2012-12-26 17 views

答えて

6
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; 
}; 

それはMember Detector Idiomの実装だがある派生します。 SFINAEを使用して、タイプTにflowというメンバーがあるかどうかをチェックします。

編集:お問い合わせのコンマはmultiple inheritanceです。 Struct derivedは(公開されて)から Tとフォールバックの両方を継承しています。

+0

-1:本当にOPの質問に答えていない、彼は**構文誤解**を持っていて、それについて説明するように頼んでいます。 –

+0

私はそれを実現し、編集しました。 – jrok

+0

oki :-)私は私のdownvoteを削除します –

2

単なる多重継承です。以下はT由来する(及びさらなる定義を提供しない)さDerivedある:

struct Derived : T { }; 

そして以下はTFallbackの両方に由来するDerivedある:

struct Derived : T, Fallback { }; 

すなわち、 Derivedのメンバーを継承します(Fallbackのメンバー)。この場合、Derivedは構造体なので、継承はデフォルトでpublic継承です。

1

コンマは、これらの2つのクラスから公開されているか、私的に(TまたはFallbackが構造体かクラスであるかによって)派生することを意味します。カンマには、Deriveが派生するクラスが含まれます。

+0

ありがとうございます。 – user1768610

1

それは意味:has_FlowTraits structの定義の中

、あなたもDerivedと呼ばれる新しいstructを定義します。

この構造体Derivedは、タイプTとタイプFallbackを継承しているとします。 (前の行を見ると、struct Fallbackが定義されています)。

{}は、実装の詳細がこれ以上ないことを単に意味します。このタイプを有効にするためのメソッドや属性の定義は必要ありません。

+0

ありがとうございます。 – user1768610

+0

:-)ようこそ! –

+0

Stephane、aix xlc 12.1を使用してコンパイルしようとすると、次のエラーが表示されます。 "YAMLTraits.h"、264行目。20:1540-0118(S)基本指定子にクラス名が必要です。 264行目は「struct Derived:T、Fallback {};」です。どのような理由が考えられるのでしょうか? – user1768610

関連する問題