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) |
这可以通过部分模板特化来完成吗?
函数模板不能部分特化;仅适用于类模板和变量模板(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)