[英]Difference between Class and Typename for C++ template
我對c ++模板有些困惑。
考慮下面的模板
template<class TYPE>
void function(TYPE data)
和
template<typename TYPE>
void function(TYPE data)
我的困惑恰恰是typename和用作變量標識或類型的類之間的區別是什么。
為了指定(類型)模板參數,這兩個參數完全相同,就像int
/ signed int
或&&
/ and
: template <typename>
/ template <class>
。
一個奇怪的限制適用於C ++ 14以下的模板模板參數:
template <template <typename> class Tmpl> struct Foo;
// ^^^^^
在這里,僅關鍵字class
被允許指定模板template參數。
在C ++ 14之后,您將能夠在任何地方一致地使用class
或typename
:
template <template <typename> typename Tmpl> struct Foo;
兩者之間有區別。
class
定義了一個類,因此,如果要將模板化的類定義為模板參數,則必須使用它。
例如,您可以定義一個接收模板化類類型的模板:
template <class A>
class Blah
{
};
template <template <class , class> class T, class A, class B>
class Blah<T<A,B>>
{
};
int _tmain(int argc, _TCHAR* argv[])
{
Blah<std::vector<int>> a;
return 0;
}
您不能使用typename
聲明類似的模板化類。
typename
也用作訪問相關模板名稱的關鍵字。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.