c++ - 专门化模板化数据类型的模板

标签 c++ templates template-specialization

我有这种情况:

#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 allowed

std::vector<T> f<std::vector<T>>() {

关于c++ - 专门化模板化数据类型的模板,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56222057/

相关文章:

c++ - C++中 `template<class int>`的含义是什么?

c++ - 如何专门针对模板类中的成员函数类型?

c++ - 智能感知 : too few arguments in function call

c++ - char[] 到十六进制字符串练习

C++模板类继承

C++14 auto lambda 可以接受 Obj<std::tuple<void>>——但模板函数不能?

c++ - 根据类模板的类型参数自动化类模板的大小参数

c++ - 我可以从类型列表中声明模板特化吗?

c++ - 如何将我的无限循环与 GTK+ 集成?

c++ - 在全局范围内调用静态方法