関数テンプレートとクラステンプレートの詳細

6587 ワード

1.関数テンプレートの性質
1)関数テンプレートは真の関数ではなく,C++コンパイルが特定の関数を生成するモジュールにすぎない.
2)関数テンプレート自体は関数を生成しないが,実際に生成した関数は,前述のadd(sum 1,sum 2)のように関数テンプレートを置き換える関数であり,
この置換はコンパイル期間でバインドされます.
3)関数テンプレートは,複数のニーズを満たす1部のみをコンパイルするのではなく,それらを置き換える各関数の1部をコンパイルする.
4)関数テンプレートでは、デフォルトテンプレートの実パラメータを設定できません.例えばtemplateはできません.
5)関数テンプレートでは自動型変換は許可されていません.
(6)テンプレートのタイプは固定されておらず,どのタイプであればどのタイプでよいのか,具体的にはどのタイプであるのか,実行時に知る.
(7)また,実行時に論理的にエラーが発生するかどうか,例えばテンプレートの機能は比サイズであるが,伝達されるパラメータはクラスであるため不可である.
C++テンプレート関数の構文
template 
関数はタイプ関数名を返します(パラメータリスト...)
template//T 1は作成したテンプレートのタイプです
T1 m(T1 X,T1 y)
{
return(xは呼び出せる限り
}
//ここでオブジェクトを呼び出してパラメータを作るのは間違っています.オブジェクトはできないからです.
calss Stu{.........}
Stu stu1,   Stu stu2
Stu stu=m(stu1,stu2);
//次は正しい!
int main()
{
     int n1=2;
     int n2=10;
     int i=m(n1,n2);//テンプレートを使うときは、n 1とn 2のタイプが同じで、戻るタイプも同じで、intはすべてintで、floatはすべてfloatです
     cout<
     return 0;
}
≪クラス・テンプレート|Class Template|oem_src≫:クラスでテンプレート・タイプが使用されています
コンストラクタ用テンプレートの場合はMyClass::MyClass(T 1 a,T 2 b)と書く
具体例は以下の通りです.
#ifndef LEIBOBAN_H
#define LEIBOBAN_H
#include
using namespace std;
 
  
template <typename T1,typename T2>  //            ,                 
class leiboban
{
public:
    T1 I;
    T2 J;
    leiboban(T1 a,T2 b)
    {
        void show();
        /*
        void show2()
        {
            cout<I<J<
 
  
        }
        */
 
  
    }
};
//    
template<typename T1,typename T2>   //                   
MyClass<T1,T2>::MyClass(T1 a,T2 b){            //          
    this->I=a;
    this->J=b;
}
//void show();
template<typename T1,typename T2>
void leiboban<T1,T2>::show()
{
    cout<<"I="<<this->I<<",J="<<this->J< 
  
}
#endif // LEIBOBAN_H