我有这个模板结构,我需要为不同的数据类型编写不同的函数:
template <typename T, int _len>
struct Field {
T data;
int len;
Field(){
len = _len;
}
};
我如何将它专门用于几种类型?像这样:
template <>
void Field<int,int> {
...
void function() {
...
specialization for int
...
}
...
};
template <>
void Field<char,int> {
...
void function() {
...
specialization for char
...
}
...
};
template <>
void Field<String,int> {
...
void function() {
...
specialization for String
...
}
...
};
我接受任何类型的建议,我甚至可以考虑使用其他类型的数据结构。我喜欢使用模板来定义&#34; Fields&#34;像这样:
Field <String, 10> myField
谢谢!
答案 0 :(得分:5)
专业化与继承不同。当你专攻时你必须重新声明一切,它被认为是一种不同的类型。
您可以使用包含公共属性和方法的基础模板化结构,然后创建从其继承的模板:
#include <iostream>
template<typename T, int _len>
struct FieldBase {
T data;
int len;
FieldBase() {
len = _len;
}
};
template<typename T, int _len>
struct Field : public FieldBase<T, _len> {};
template<int _len>
struct Field<int, _len> : public FieldBase<int, _len> {
void function() {
std::cout << "int " << this->len << std::endl;
}
};
template<int _len>
struct Field<char, _len> : public FieldBase<char, _len> {
void function() {
std::cout << "char " << this->len << std::endl;
}
};
int main()
{
Field<int, 5> f_int;
Field<char, 10> f_char;
f_int.function();
f_char.function();
return 0;
}
输出:
int 5
char 10