すなわち。次のように使用できるクラス ADT をコーディングしたいと思います。
myADT <type> objectA;
誰かが次のようなベクトルを使用するのと同じ方法で:
vector <type> aVector;
テンプレートと <> 演算子のオーバーロードに関係があるのではないかと推測していますが、引数としてデータ型を取得するにはどうすればよいですか?
ハードコードされた typedef を使用して ADT を実装するクラスがあるとしますT
。
class ADT
{
public:
typedef int T;
ADT();
T& operator[](size_t index);
const T& operator[](size_t index) const;
size_t size() const;
...
private:
T* p_;
size_t size_;
};
(実際の ADT に適した内部ストレージとメンバー関数を作成する必要があります)。
これを変更してT
as done forstd::vector
などを指定できるようにするには:
template <typename T> <-- specification of T moved to here
class ADT
{
public:
<-- typedef for T removed from here
ADT();
T& operator[](size_t index);
const T& operator[](size_t index) const;
size_t size() const;
...
private:
T* p_;
size_t size_;
};
使用法は次のとおりです。
ADT<int> an_adt_int;
ADT<double> an_adt_double;
ADT が抽象データ型の場合は、テンプレートを使用する必要があります
template<class T>
struct myADT
{
// implementation, for example, two variables of type T.
T A;
T B;
};
使用する
myADT<int> objectA;
objectA.A = 3;
objectB.B = 4;
myADT<char> C;
C.A = 'A';
C++ テンプレートに関する本や記事を読むことをお勧めします。Google「C++ テンプレート」。
私はそれがあなたが探しているものであることを願っています
template <typename NodeType> class List;
template <typename NodeType>
class Node_List
{
...
private:
NodeType date;
Node_List< NodeType > *next_Ptr;
}
class List
{
...
private:
Node_List< NodeType > *first_Ptr;
Node_List< NodeType > *last_Ptr;
}
使用:
リスト < int > int_list; リスト < char > char_list;
テンプレートは、型ごとにコードを実際に繰り返すことなく、型の機能を適応させるのに役立ちます。これは汎用プログラミングです。
template < class T >
class foo
{
T number ;
public:
foo( T a )
{
number = a; // This can be achieved through initializer lists too.
}
};
上記のスニペットのキーワードtemplate
は、以下がテンプレートであることを示しています。また、型はclass
、つまり で囲まれてい<>
ます。したがって、foo
はテンプレート パラメータが であるクラス テンプレートですT
。
foo<int> obj(10);
テンプレート パラメータの型はint
です。したがって、対応するコードは、テンプレートのインタンシエーションでコンパイラによって生成されます。つまり、
class foo
{
int number ;
public:
foo( int a )
{
number = a; // This can be achieved through initializer lists too.
}
};
以外の別のテンプレート パラメーターint
が指定されている場合、対応するコードがテンプレートのインスタンス化時にコンパイラによって生成されます。詳細については、MSDN テンプレート チュートリアルを参照してください。それが役に立てば幸い。
@Matt Munson、トニーへの質問への回答があります... cplusplusから:
型パラメーターを使用して関数テンプレートを宣言するための形式は次のとおりです。
template <class identifier> function_declaration;
template <typename identifier> function_declaration;
両方のプロトタイプの唯一の違いは、キーワード class またはキーワード typename の使用です。どちらの式もまったく同じ意味を持ち、まったく同じように動作するため、その使用法は明確ではありません。