次のコードを理解しようとしています。次いで由来Tから構造と何を「」手段とフォールバック{}C++テンプレートと派生クラス
答えて
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とフォールバックの両方を継承しています。
-1:本当にOPの質問に答えていない、彼は**構文誤解**を持っていて、それについて説明するように頼んでいます。 –
私はそれを実現し、編集しました。 – jrok
oki :-)私は私のdownvoteを削除します –
単なる多重継承です。以下はT
由来する(及びさらなる定義を提供しない)さDerived
ある:
struct Derived : T { };
そして以下はT
とFallback
の両方に由来するDerived
ある:
struct Derived : T, Fallback { };
すなわち、 Derived
は とのメンバーを継承します(Fallback
のメンバー)。この場合、Derived
は構造体なので、継承はデフォルトでpublic継承です。
コンマは、これらの2つのクラスから公開されているか、私的に(T
またはFallback
が構造体かクラスであるかによって)派生することを意味します。カンマには、Derive
が派生するクラスが含まれます。
ありがとうございます。 – user1768610
それは意味:has_FlowTraits struct
の定義の中
、あなたもDerived
と呼ばれる新しいstruct
を定義します。
この構造体Derived
は、タイプTとタイプFallback
を継承しているとします。 (前の行を見ると、struct Fallback
が定義されています)。
{}
は、実装の詳細がこれ以上ないことを単に意味します。このタイプを有効にするためのメソッドや属性の定義は必要ありません。
ありがとうございます。 – user1768610
:-)ようこそ! –
Stephane、aix xlc 12.1を使用してコンパイルしようとすると、次のエラーが表示されます。 "YAMLTraits.h"、264行目。20:1540-0118(S)基本指定子にクラス名が必要です。 264行目は「struct Derived:T、Fallback {};」です。どのような理由が考えられるのでしょうか? – user1768610
- 1. IDispatch派生クラスのATLテンプレート
- 2. C# - 派生クラス
- 3. 派生クラスC#
- 4. のC#:派生クラス
- 5. クラスとその派生クラスのC++メモリプール
- 6. 基本クラスとその派生クラスに限定されたC++テンプレート
- 7. forwardはテンプレートC++の派生クラスを宣言します
- 8. 同じクラスから派生したクラスから派生したC++サブクラス
- 9. 派生クラス
- 10. FragmentActivity:派生クラス
- 11. C#の派生クラスの定数のオーバーライド
- 12. FormerServices.GetSerializableMembers()経由のISerializable派生クラス、C#
- 13. 2つの派生クラスのC++コピー
- 14. 派生C++クラスのメモリ割り当て
- 15. Pythonの:派生クラス
- 16. 派生クラスのAssemblyInitialize
- 17. クラスの派生 - ビジターパターン
- 18. 隠す派生クラス
- 19. 派生クラスからクラスを派生させる
- 20. Android.Content.ActivityNotFoundException(アクティビティから派生したクラスから派生したクラス)
- 21. C#:パラメータとして派生クラスを渡します。
- 22. C++で深さの派生クラスとは何ですか?
- 23. Luabind:パラメータとしての派生クラス
- 24. インターフェイスの継承と派生クラス
- 25. は、C++のテンプレートに貼り付け - Stdから派生::マップ
- 26. 派生クラスからベースクラス
- 27. ネイティブクラスのモノタック派生クラス
- 28. 派生子クラスのコレクション
- 29. 検索派生テンプレートの種類
- 30. テンプレート派生型にベースポインタからダウンキャスト
'Derived'は' T'と 'Fallback'の2つの基本クラスを持つ' struct'です。 – Mankarse