2016-03-15 131 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