C/C+:テンプレート
1628 ワード
通常、テンプレート宣言と定義はヘッダファイルに置かれます{red{通常、テンプレート宣言と定義はヘッダファイルに置かれます}}通常、テンプレート宣言と定義はヘッダファイルに置かれます
関数テンプレート、クラステンプレートに分けます.
テンプレートクラスとテンプレート関数の違いは、テンプレートクラスが呼び出し{red{テンプレートクラスとテンプレート関数しか表示できない点です.テンプレートクラスは呼び出ししか表示できません}}テンプレートクラスとテンプレート関数の違いは、テンプレートクラスが呼び出ししか表示できない点です.
テンプレートを使用することは、コードを多重化することを意味しますが、ターゲットのバイナリコードが肥大化し、実行効率に影響を与える可能性があります.たとえば、次のようにします.
テンプレートの2番目のパラメータは分離され、クラス内のパラメータになります.
特化:{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{};