C++クラステンプレートの使用

2225 ワード

C++に従事してとても长くて、前段の时に本を読む时、达人を発见して、すべてテンプレートを书いていないで、泛型のプログラミング、顿感の差.自分はテンプレートも書いていないので、テンプレートの使い方を少し研究しました.
テンプレートは簡単に言えば、あるオブジェクトの同じ方法、あるいは処理方式をまとめ、まとめ、共通部分を処理し、多種の異なるオブジェクトに適応できる方法を生成する.C言語時代にはマクロ定義の方法である.#defineで決めた1つの方法ですが、C時代は関数の方法の処理だけで、まだオブジェクトの概念がなく、これは後のC++関数テンプレートと同じです.
 1.クラステンプレート
「」を参照してください.
   http://www.cnblogs.com/waytofall/archive/2012/06/26/2563642.html
 
1.関数テンプレート
1.テンプレート関数は、異なるテンプレートの実パラメータの関数ファミリーを定義します.その表現は普通の関数と似ているように見えますが、唯一の違いは、一部の関数要素が不確定であることです.これらのパラメータは使用時にパラメータ化されます.
template <typename T>

inline T const& max(T const& a,T const& b) { return a<b ? b : a; }
              ,     T   。
 

2.関数テンプレートのインスタンス化:テンプレートパラメータの代わりに特定のタイプを使用するプロセス.このプロセスはテンプレートのインスタンスを生成します.このプロセスはコンパイル時に行われます.
テンプレート内の操作は、パラメータのタイプによってサポートされます.そうしないと、エラーが発生します.
コンパイル時:
1)インスタンス化する前に、テンプレートコード自体をチェックし、構文エラーなどを表示します.例えば、セミコロンの漏れなどです.
2)インスタンス化中にテンプレートコードを確認し、すべての呼び出しが有効かどうかを確認します.このインスタンス化タイプでは、一部の関数の呼び出しはサポートされていません.
 
3.指定したテンプレートパラメータを表示する
テンプレートパラメータは自動タイプ変換をサポートしておらず、Tごとに正確に一致する必要があります.
template <typename T>

inline T const7 max(T const& a, T cosnt& b);

...

max(4,7)                    //OK max(4,4.2) //ERROR,    int,    double
1)max(static_cast(double)(4),4.2)   //OK
2)        :
max<double>(4,4.2)
3)        。
 

4.関数テンプレートの再ロード
通常の関数と同様に、テンプレート関数を再ロードすることができ、同じ関数名に異なる関数定義を持つことができます.
いくつかの基本的な原則:
1)非テンプレート関数と同じ名前のテンプレート関数を同時に存在させることができる.非テンプレート関数と同名の関数テンプレートの場合、他の条件が同じであれば、呼び出し時に非テンプレート関数が呼び出され、テンプレート関数はインスタンス化されません.
2)テンプレートがよりよく一致する場合は、テンプレートパラメータを選択します.
3)表示できる空のテンプレートインスタンスのリストを指定し、コンパイラにテンプレートでマッチングするように伝えます.
4)関数のすべてのリロードの説明は、その関数が呼び出される前に行われる.
私の今の感じはこの機能が少なくて、とても問題が発生しやすくて、後で知りません.