如何在C++中专门化 std::vector 的模板模板参数

How to specialize template template parameter for std::vector in C++

本文关键字:vector 参数 std C++ 专门化      更新时间:2023-10-16

我需要对这段代码进行专业化:

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

对于模板 std::vector。目前,它适用于任何 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的想法都可以。

不要专门化,重载:

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

在您传入std::vector而不是任何其他 2 类型的类模板(例如 std::list )。它将以一致、易于推理的方式被首选。此外,无论如何,您都无法部分专用化函数模板。

显式函数模板专用化是...问题。您编写专业课程的顺序可能很重要!

<小时 />

请注意,此语法不正确:

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

显式指定的模板参数从左到右。所以在这里你指定TSome2ArgsTemplate <A, B>...这可能会阻止扣除成功。您不需要显式指定任何内容:

Some2ArgTemplate<A, B> arg = ...;
function(arg); // deduce T=A, Alloc=B, VECTOR=Some2ArgTemplate
相关文章: