2016-03-15 136 views
1

我需要這個代碼的專業化:如何專門爲STD模板的模板參數::向量C++

template < class T, class Alloc, template <class, class> class VECTOR > 
void function(const VECTOR<T, Alloc> &argument); 

爲模板的std ::向量。目前,它適用於任何2參數模板(「類VECTOR」)參數。

換句話說:

// A, B -- any unpredictable types 

function< std::vector <A, B> > (arg);   // specialization 
function< Some2ArgsTemplate <A, B> > (arg);  // general 
function< SomeOther2ArgsTemplate <A, B> > (arg); // general 

是否有可能實現與沒有關於A和B的知識?任何C++ 11/C++ 14的想法都可以。

+3

出了什麼問題'模板 void函數(常量的std ::矢量&參數);',並用扣調用('函數( ARG)')? – TartanLlama

回答

4

不要專門,過載:

template < class T, class Alloc> 
void function(const std::vector<T, Alloc> &argument); 

在您在std::vector傳遞,而不是任何其他2型類模板(例如std::list)這將是優選的。而且它會以一致,簡單的方式推薦。另外,你無法部分地專注於功能模板。

明確的功能模板專長是... problematic。您編寫專業化的順序可能很重要!


注意,這個語法是不正確的:

function< Some2ArgsTemplate <A, B> > (arg); 

明確指定模板參數向左走向右。所以在這裏你指定TSome2ArgsTemplate <A, B> ...這可能會阻止成功扣除。你不應該需要明確指定任何東西:

Some2ArgTemplate<A, B> arg = ...; 
function(arg); // deduce T=A, Alloc=B, VECTOR=Some2ArgTemplate