[英]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.