C++テンプレートクラス

2288 ワード

注意事項:
    1.コンパイラはテンプレートをインスタンス化するときにテンプレートの完全な正確な定義を表示する必要があるため、テンプレートメンバー関数を独立したインプリメンテーションファイルに配置できません.
通常の関数やクラスはコンパイラでインスタンス化する必要はありませんので、定義を見る必要はありません.宣言さえ分かればいいです.
        
Stack.h  
--------------------------
template
class Stack{
  enum{MAX = 10};
  T items[MAX];
  int ntop;
public:
  Stack();
  bool isempty();
  bool isfull();
  bool push(const T &item);
  bool pop(T &item);
}

template
Stack::Stack()
{
  top = 0;
}

template
bool Stack::isempty()
{
   return top == 0;
}

template
bool Stack::isfull()
{
  return top == MAX;
}

template
bool Stack::push(const T &item)
{
   if(isfull())
     return false;
   items[top++] = item;
   return true;
}

template
bool Stack::pop(T &item)
{
  if(isempty())
     return false;
  item = items[--top];
  return true;
}
-----------------------------------

    2.表示するパラメータのタイプ
       Stack  myintS;  Stack<:stirng> mystrS;  
   3.クラス外で定義されたメンバー関数は、テンプレート宣言を使用する必要があります.
template
Stack::Stack()
{
  top = 0
}

   4. テンプレートクラスを使用する場合は、配列=の操作など、特定のタイプの実際の状況に注意してください...だから具体的な状況を具体的に分析しなければならない.
   5. テンプレートの非タイプパラメータまたは式パラメータは、整形、列挙、ポインタ、参照のみであり、アドレスを取得できず、変更できません.
       
ArrayTP
n              ,  ++n &n   ,              

6.テンプレートの具体化
6.1暗黙的なインスタンス化、すなわち、コンパイラが汎用テンプレートを使用して提供する処方箋生成の例
6.2テンプレートクラスの名前コントロールで宣言されたインスタンス化の表示
template ArrayTP<:string>;
template Stack;
                       ,                

6.3特定のタイプを表示する操作が異なる場合があります.この場合、特定のタイプに対して特定のタイプを表示する必要があります.
       :
template<> class ArrayAP
{
  ...
}

テンプレートクラスはクラスのメンバーとしても使用できます.テンプレートはテンプレートパラメータとしても使用できます.テンプレートクラスには友元関数、拘束テンプレート友元、非拘束テンプレート友元などもあります.
typedefまたはusingを使用して別名を定義することもできます.
typdef ArraryAP  AINT;
template
   using AINT = ArraryAP;