[英]C++ templates and derived classes
我想了解以下代碼。 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;
};
這是Member Detector Idiom的一個實現。 它使用SFINAE來檢查類型T是否有一個名為flow
的成員。
編輯:您要問的逗號部分是多重繼承 。 結構派生的(公開)從T和回退繼承。
它只是多重繼承。 以下是從T
Derived
(並且不提供進一步的定義):
struct Derived : T { };
以下是從T
和Fallback
Derived
:
struct Derived : T, Fallback { };
也就是說, Derived
將繼承的成員T
和成員Fallback
。 在這種情況下,由於Derived
是一個結構,因此繼承是默認的公共繼承 。
逗號表示它從這兩個類中公開或私有地派生(取決於T
或Fallback
是結構還是類)。 逗號只是將那些類包含在Derive
將派生的類中。
它的意思是:
在has_FlowTraits struct
的定義中,您還定義了一個名為Derived
的新struct
。
你說這個結構Derived
繼承了類型T和類型Fallback
。 (如果您之前查看該行,則剛剛定義了struct Fallback
)。
{}
只是意味着沒有更多的實施細節。 此類型不再需要更多方法或屬性定義。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.