簡體   English   中英

C ++模板和派生類

[英]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 { };

以下是從TFallback Derived

struct Derived : T, Fallback { };

也就是說, Derived將繼承的成員T 成員Fallback 在這種情況下,由於Derived是一個結構,因此繼承是默認的公共繼承

逗號表示它從這兩個類中公開或私有地派生(取決於TFallback是結構還是類)。 逗號只是將那些類包含在Derive將派生的類中。

它的意思是:

has_FlowTraits struct的定義中,您還定義了一個名為Derived的新struct

你說這個結構Derived繼承了類型T和類型Fallback (如果您之前查看該行,則剛剛定義了struct Fallback )。

{}只是意味着沒有更多的實施細節。 此類型不再需要更多方法或屬性定義。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM