C/C+:テンプレート

1628 ワード

通常、テンプレート宣言と定義はヘッダファイルに置かれます{red{通常、テンプレート宣言と定義はヘッダファイルに置かれます}}通常、テンプレート宣言と定義はヘッダファイルに置かれます
関数テンプレート、クラステンプレートに分けます.
テンプレートクラスとテンプレート関数の違いは、テンプレートクラスが呼び出し{red{テンプレートクラスとテンプレート関数しか表示できない点です.テンプレートクラスは呼び出ししか表示できません}}テンプレートクラスとテンプレート関数の違いは、テンプレートクラスが呼び出ししか表示できない点です.
テンプレートを使用することは、コードを多重化することを意味しますが、ターゲットのバイナリコードが肥大化し、実行効率に影響を与える可能性があります.たとえば、次のようにします.
template
class A{
};
int main(){
	A a1;
	A a2;
	return 0;
}

テンプレートの2番目のパラメータは分離され、クラス内のパラメータになります.
特化:{red{特化:}}特化:
関数テンプレート特化,クラステンプレート特化に分けられる.すなわち、テンプレートパラメータが異なる場合、採用する操作手順が異なる場合もある.
関数の特化:
template
bool is(T x,T y){
    return x == y;
}

template<>
bool is(char* x,char* y){
    return strcmp(x,y) == 0;
}

クラス特化:
template
class A{
public:
bool is(T x,T y){
    return x == y ;
}
};

template<>
class A{
public:
bool is(const char* x,const char* y){
    return strcmp(x,y)==0;
}
};

int main(){
    A a;
    A b;
    cout<

したがって,選択関数テンプレートはコンパイル時に決定され,クラステンプレートインスタンスはプログラマ表示によって指定される.したがって,選択関数テンプレートはコンパイル時に決定され,クラステンプレートインスタンスはプログラマ表示で指定される.したがって,選択関数テンプレートはコンパイル時に決定され,クラステンプレートインスタンスはプログラマ表示によって指定される.
すべて特化:
template
class X{};
template<>
class X{};

部分特化:
template
class X{};
template
class X{};