2014-09-22 71 views
3

我定義了一個可變參數結構像這樣可變參數結構規範

template <class T, class... TRest> 
struct Opa 
{ 
    Opa() 
    { 
     std::cout << "Mutiple-arguments template"; 
    } 
}; 

,並希望專門它與1個參數的情況下,只有如下

template <> 
struct Opa<class T> 
{ 
    Opa() 
    { 
     std::cout << "One-argument template"; 
    } 
}; 

但是編譯器會忽略這第二個結構,和來自

的輸出
Opa<int> opa; 
Opa<int, int> opa_opa; 

Mutiple-arguments template, Mutiple-arguments template

指定一個參數的模板以不同的方式,例如

template <class T> 
struct Opa 
{...} 

導致編譯錯誤。 我意識到我的問題很簡單,但是使用谷歌搜索並沒有幫助。 所以請不要把腐爛的西紅柿扔給我,謝謝你的回答。

+0

你的variadic模板在哪裏? – 2014-09-22 09:35:45

回答

7

您的單參數專業化的語法是錯誤的。你可能完全專注於現場申報class T。你想這樣的:

template <class T> 
struct Opa<T> 
{ 
    Opa() 
    { 
     std::cout << "One-argument template"; 
    } 
}; 

Live example

部分特例被列出參數在尖括號中的部分專業化的template後宣佈(在你的情況下,單一類型的參數,class T),和列出參數爲主模板名稱後面的尖括號中的主模板(在您的情況下,單個類型參數,T)。