专门化模板数据类型的模板
Specialize template of templated data type
我有这种情况:
#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会生成更多有用的错误消息:
错误:不允许使用非类别的非级别部分专业
f<std::vector<T,std::allocator<_Tp1> > >
std::vector<T> f<std::vector<T>>() {
如果问题是x,而解决方案是y,则通常对功能模板的专业化为z。这是可以进行专业化的时候。您不能部分专业化功能模板,只能超载它们。
这里的解决方案是使用助手。您 can 专业的类模板将完成工作。同时,功能模板仅向其转到其。
namespace detail {
template<typename T>
struct f {
static T work() { return T(); }
};
template<typename T>
struct f<std::vector<T>> {
static std::vector<T> work() { return {T()}; }
};
}
template<typename T>
T f() { return detail::f<T>::work(); }
相关文章:
- 防止主数据类型C++的隐式转换
- 处理小于cpu数据总线的数据类型.(c++转换为机器代码)
- 在C++中打印指向不同基元数据类型的指针的内存地址
- C++浮点数据类型和字符串数据类型无法子到模板函数中
- 如何计算数据类型的范围,例如int
- C++中数据类型修饰符的顺序
- C++LinkedList问题.数据类型之间存在冲突?没有匹配的构造函数
- 特定数据类型的模板类
- 具有多个模板的模板函数,用于特定数据类型(如字符串)?
- 有没有办法提示用户使用哪种数据类型作为模板 c++
- int数据类型的指针指向的是什么,如果是一个类的私有数据成员,我们创建了该类的两个对象?
- 时间复杂度 当具有复合数据类型(如元组或对)时?
- 如何获取C++字符数据类型的地址
- 将复杂的非基元C++数据类型转换为 Erlang/Elixir 格式,以使用 NIF 导出方法
- 构造智能点数据类型以及普通数据类型的通用方法
- 如何使映射键具有两种不同的数据类型?
- 数据类型"struct seq<0, 1, 2>{}"含义是什么?
- 如何在不破坏现有应用程序的情况下更改 API 中 stl 容器的数据类型?
- 专门化模板数据类型的模板
- 非数据类型模板参数,生成更多专门化