次のコードを理解しようとしています。次いで由来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. C++のテンプレート<基本クラスと派生クラス>
- 2. C# - 派生クラス
- 3. 派生クラスC#
- 4. IDispatch派生クラスのATLテンプレート
- 5. C#の派生クラスとプロパティ
- 6. のC#:派生クラス
- 7. クラスとその派生クラスのC++メモリプール
- 8. 基本クラスとその派生クラスに限定されたC++テンプレート
- 9. 派生クラスのテンプレートの特殊化
- 10. forwardはテンプレートC++の派生クラスを宣言します
- 11. std :: is_base_ofを持つ派生クラスのC++テンプレート関数
- 12. c#派生クラスのリスト
- 13. テンプレートクラスと派生クラス
- 14. スマートポインタと派生クラス
- 15. 派生クラスのテンプレート引数を使用する基本クラス
- 16. 同じクラスから派生したクラスから派生したC++サブクラス
- 17. 派生クラスとシャドーイングのソリューション
- 18. Typescript typeof classと派生クラス
- 19. 派生クラス
- 20. は、派生クラス
- 21. 派生クラス
- 22. shared_from_this派生クラス
- 23. 派生クラス
- 24. FragmentActivity:派生クラス
- 25. 派生クラス
- 26. 派生クラス
- 27. C#の継承クラスと派生クラス(DIケース)
- 28. C#の派生クラスの定数のオーバーライド
- 29. FormerServices.GetSerializableMembers()経由のISerializable派生クラス、C#
- 30. C++ベースクラスポインタを変更する派生クラス
'Derived'は' T'と 'Fallback'の2つの基本クラスを持つ' struct'です。 – Mankarse