我需要对此代码进行专门化:
template < class T, class Alloc, template <class, class> class VECTOR >
void function(const VECTOR<T, Alloc> &argument);
用于模板std :: vector。目前,它适用于任何双参数模板(&#34;类VECTOR&#34;)参数。
换句话说:
// 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的想法都可以。
答案 0 :(得分: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);
明确指定的模板参数从左到右。因此,您在此处指定T
为Some2ArgsTemplate <A, B>
...这可能会阻止扣除成功。您不应该明确指定任何内容:
Some2ArgTemplate<A, B> arg = ...;
function(arg); // deduce T=A, Alloc=B, VECTOR=Some2ArgTemplate