このテンプレート構造体があり、データ型ごとに異なる関数をコーディングする必要があります。
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
...
}
...
};
私はあらゆるタイプの提案を受け入れます。他のタイプのデータ構造の使用を検討することもできます。テンプレートを使用して、次のように「フィールド」を定義するのが好きです。
Field <String, 10> myField
ありがとう!
専門化は継承とは異なります。あなたが専門化するとき、あなたはすべてを再宣言しなければなりません、それは異なるタイプとみなされます。
共通の属性とメソッドを含む基本テンプレート構造体を使用して、それを継承するテンプレートを作成できます。
#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
文字10
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加