[英]Class inheritance of template parameters in C++
我是C ++的新手,碰巧遇到了一個看起來像這樣的代碼:
template<class T, class Composite> class CompositeTester: public Composite
{
public:
CompositeTester(T* instance, const typename Composite::Parameters& parameters) : Composite(parameters)
{
singletonInstances_[parameters.instanceIndex] = instance;
}
}
在構造器CompositeTester
,我才知道的實例Composite
與創建parameters
作為參數。 但是這種語法很難理解const typename Composite::Parameters
。 如何解釋這種語法? 定義類復合對象是否有效?
singletonInstances_[parameters.instanceIndex] = instance
。 這里是為parameters.instanceIndex
創建的新變量嗎? 除了我在這里的問題中提到的內容之外, class Composite::Parameters
或class Composite
的源代碼中沒有定義。
這就是奇怪的重復模板模式 。
typename
在此處用於表示從屬類型名稱。 沒有它,編譯器會將合格名稱解析為非類型實體。 請參閱以下常見問題解答: 為什么必須在何處以及為什么要放置“模板”和“類型名”關鍵字?
這在標准C ++中格式錯誤,因為未聲明singletonInstances_
。 如果在基類中聲明了它,則需要使用this->
使其成為從屬名稱。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.