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

标签 c++ templates vector

我需要这段代码的特化:

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

用于模板 std::vector。目前,它适用于任何 2 参数模板(“class 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)相反。它将以一致的、易于推理的方式成为首选。此外,您无论如何都不能部分特化函数模板。

显式函数模板特化是... problematic .您编写特化的顺序可能很重要!


请注意,此语法不正确:

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

明确指定的模板参数从左到右。所以在这里你指定 T成为Some2ArgsTemplate <A, B> ...这可能会阻止演绎成功。您不需要明确指定任何内容:

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

关于c++ - 如何在 C++ 中专门化 std::vector 的模板模板参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36014359/

相关文章:

java - OpenCV + Android + 车牌识别

c++ - 错误 LINK2005 已在 Main.obj 中定义

c++ - 有没有办法将一个对象注入(inject)另一个对象的结构?

templates - 替换 <f :all/> tag with normal fields on custom template grails

r - 检查向量中的连续元素

c++ - 在二维 vector 的特定位置插入

php - MySQL 插入,在 PHP 中比 C++ 更快,这是预期的吗?

c++ - 通过自制软件安装的 freetype,似乎无法正确包含标题

c++ - 如何使用类型未知的成员创建一个可以在列表/vector 中使用的类?

django - 如何在 django 模板中显示代码片段, "|safe"过滤器没有帮助