簡體   English   中英

模板聲明中省略了c ++類型參數。 但是,在成員函數的定義中呢?

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

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