簡體   English   中英

C ++模板的類和類型名之間的區別

[英]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&& / andtemplate <typename> / template <class>

一個奇怪的限制適用於C ++ 14以下的模板模板參數:

template <template <typename> class Tmpl> struct Foo;
//                            ^^^^^

在這里,僅關鍵字class被允許指定模板template參數。

在C ++ 14之后,您將能夠在任何地方一致地使用classtypename

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.

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