2015-12-15 109 views
1

有一個模板類定義模板功能採取了模板類的參數

template <class T0, class T1, ....... > // many template parameters 
class Foo { ...... } 

我如何定義一個模板函數接受Foo任何模板參數?

函數可以是operator <<,在這種情況下,定義單個模板參數通常會破壞編譯。歡迎使用C++ 11解決方案。

+0

您使用省略號('...')有點不幸。你的意思是'Foo'是一個可變參數'template'還是隻有一個具有任意但固定數量的參數? – 5gon12eder

+0

@ 5gon12eder編輯...謝謝! – xuhdev

+0

請貼近實際的代碼,你已經嘗試了什麼,出了什麼問題,*和*你的抽象目標是什麼。僞代碼是一個糟糕的主意。 – Yakk

回答

2

您可以定義一個函數模板是這樣的:

template <typename ...Args> 
void f(Foo<Args...> foo) 
{ 
    // ... 
} 
+0

如果這是OP的意思,我認爲這是正確的答案。 – 5gon12eder

2

最明顯的方法是

template <typename... T> 
std::ostream& operator<< (std::ostream& out, Foo<T...> const& value) { 
    return out << "Foo(...)"; 
} 

這個版本比服用只是一個模板參數一個版本更加專業化。如果要使用一個模板參數定義此運算符,則需要確定模板實際上符合Foo<T...>的定義,否則將其從過載集中移除。儘管可以這樣做,但在這種情況下,依賴於重載的部分排序似乎更簡單。