[英]c++ type arguments are omitted in template declaration. However, how about in the definition of member function?
抱歉,我是c ++編程的初學者。
據我所知,模板聲明中的類型參數可以省略。 例如
template<typename T>
class A{
A<T> func(A<T> t);
}
可以寫成
template<typename T>
class A{
A func(A t) {}
}
另外,我知道,如果成員函數是在類外部定義的,則不能省略類型實參。 但是,我發現函數的參數類型中的類型參數也可以省略。 為什么會這樣呢?
我的意思是
A<T> A<T>:: func(A<T> t) {}
為什么下面的代碼即使在模板聲明之外也是允許的?
A<T> A<T>:: func(A t) {}
之所以起作用,是因為A<T>::
了聲明的范圍-它后面的所有內容都知道A<T>
的內容,包括注入的類名A
這也嚴格按照源代碼順序進行,從而導致兩個語義相同的定義之間具有以下好奇心:
A A<T>::func(A t) {} // Doesn't work -- `A` is not known before `A<T>::`
auto A<T>::func(A t) -> A {} // Works, because the return type is after `A<T>::`!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.