簡體   English   中英

奇怪的模板構造函數語法

[英]Weird template constructor syntax

有什么區別

template <class T>
class why
{
public:
   why()
   {}
};

template <class T>
class why
{
public:
   why<T>()
   {}
};

他們似乎都工作相同並編譯。

編輯

而且,如果它們真的相同,為什么即使在C ++語言中這個功能呢?

他們是等同的。 在前者中, why 注入的名稱被定義為與why<T> (其中T是實際模板參數)的why<T>相同。這是為了便於鍵入而存在。


請注意,這種注入是在類的范圍內,而不是超出范圍。 明顯,但給出:

template <typename T>
struct foo
{
    foo x(foo f);
};

一個常見的錯誤可能是嘗試定義x如下所示:

template <typename T>
foo foo<T>::x(foo f) { return f; }

但這將是一個錯誤,因為返回類型中的foo需要模板參數。 但是,參數列表中的foo是可以的,因為在foo<T>::我們在類的范圍內,並且foo被定義為foo<T> 因此,正確的方法是:

template <typename T>
foo<T> foo<T>::x(foo f) { return f; }

template <typename T>
foo<T> foo<T>::x(foo<T> f) { return f; } // equivalent

暫無
暫無

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

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