首页 > 解决方案 > 部分模板模板向量特化

问题描述

我有一个处理不同容器的通用函数。

template<template<class, class> class C, class T, class A>
void handle(C<T, A> const& c)
{
    cout << "General handling\n";
}

现在,如果我将自定义容器传递给它,我希望它做出不同的反应。为简单起见,我首先尝试将这个函数部分专门化为向量,以单独的方式处理向量。
这就是我认为它应该看起来的样子。

template<class T, class A>
void handle<std::vector>(std::vector<T, A> const& c)
{
    cout << "vector handling\n";
}

但是gcc给出以下错误:

无法执行程序编译器返回:1 编译器标准错误:16:36:错误:主模板 16 声明中的模板 ID 'handle class std::vector>' | (std::vector const& c) |

这可以通过部分模板专业化来完成吗?

标签: c++templatesc++14partial-specialization

解决方案


函数模板不能部分特化;它仅适用于类模板和变量模板(C++14 起)。您可以改为应用函数模板重载。

例如

template<template<class, class> class C, class T, class A>
void handle(C<T, A> const& c)
{
    cout << "General handling\n";
}

template<class T, class A>
void handle(std::vector<T, A> const& c)
{
    cout << "vector handling\n";
}

推荐阅读