我有这种情况:
#include <vector>
template<typename T>
T f() { return T(); }
template<>
template<typename T>
std::vector<T> f<std::vector<T>>() {
return { T() };
}
int main(){
f<std::vector<int>>();
}
我正在尝试为 std::vector<T>
专门化模板,但我收到此错误:
error: too many template-parameter-lists
std::vector<T> f<std::vector<T>>() {
我怎样才能专注于 std::vector<T>
?
最佳答案
不存在部分专用函数模板这样的东西。您正在做的是创建一个新模板,因此正确的语法是:
template<typename T>
std::vector<T> f() {
return { T() };
}
这重载了函数名 f
并且两个模板是独立的。但是通过同时拥有两个重载,几乎所有的调用都会调用 f
模棱两可,包括你的 main()
中的一个例子.
编辑:
你是否删除了 template<>
对于类部分特化也是无效的行,然后 clang 生成更有用的错误消息:
error: non-class, non-variable partial specialization
f<std::vector<T,std::allocator<_Tp1> > >
is not allowedstd::vector<T> f<std::vector<T>>() {
关于c++ - 专门化模板化数据类型的模板,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56222057/