部分模板模板向量特化

tur*_*oni 4 c++ templates partial-specialization c++14

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

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

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

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

但是gcc给出了以下错误:

无法执行程序编译器返回:1 编译器标准错误:16:36:错误:模板 id 'handle class std::vector>' in declaration of primary template 16 | (std::vector const& c) |

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

son*_*yao 8

函数模板不能部分特化;仅适用于类模板和变量模板(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";
}
Run Code Online (Sandbox Code Playgroud)