テンプレートと明示的特殊化とは? わかりやすく解説

Weblio 辞書 > 辞書・百科事典 > ウィキペディア小見出し辞書 > テンプレートと明示的特殊化の意味・解説 

テンプレートと明示的特殊化

出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2020/10/02 16:54 UTC 版)

テンプレートの部分特殊化」の記事における「テンプレートと明示的特殊化」の解説

テンプレートメタクラスである。つまりコンパイラに対してどのようなクラス作るかを指示したある種抽象データ型であると言える。たとえばテンプレートであるvector動的配列)をプログラマが使うときにはvectorvectorどのようにデータ型指定して実体化する。実体化されたvectorは、コンパイラ生成したオブジェクトコードの中ではそれぞれ別のコード生成されそれぞれ別のクラスとして扱われる。 もしテンプレートクラスは特定のデータ型指定して使われることが多いと知っており、そのデータ型場合にだけ人の手最適化かけられる(たとえば整数型のときは2の乗数での乗除算をシフト演算にするなど)としたら、通常の場合テンプレートとは別に明示的特殊化を行うことができる。テンプレート使用する際に指定されデータ型が、明示的特殊化されているものだった場合コンパイラ明示的特殊化されたものをコンパイルしてコード生成する。 たとえば、これは要素数nの配列先頭要素を指すポインタpに対して全ての要素をxにするということを行うC++関数テンプレートarray_fillである。 templateinline void array_fill(T* p, std::size_t n, T x){ std::fill_n(p, n, x); } これは、特殊化ではない通常のテンプレートの定義である。このような明示的特殊化でないものを一次テンプレートと言う (X3014 14.5.4)。 もしその配列char型だった場合標準Cライブラリmemsetを使うことができ、その方std::fill_nより高速化されているとする。そのような場合次のように明示的特殊化すれば、array_fillchar型の先頭要素を指すポインタ渡されときにはmemset用いるようにすることができる。 template<>inline void array_fill(char* p, std::size_t n, char x){ std::memset(p, x, n);}

※この「テンプレートと明示的特殊化」の解説は、「テンプレートの部分特殊化」の解説の一部です。
「テンプレートと明示的特殊化」を含む「テンプレートの部分特殊化」の記事については、「テンプレートの部分特殊化」の概要を参照ください。

ウィキペディア小見出し辞書の「テンプレートと明示的特殊化」の項目はプログラムで機械的に意味や本文を生成しているため、不適切な項目が含まれていることもあります。ご了承くださいませ。 お問い合わせ



英和和英テキスト翻訳>> Weblio翻訳
英語⇒日本語日本語⇒英語
  

辞書ショートカット

すべての辞書の索引

「テンプレートと明示的特殊化」の関連用語

テンプレートと明示的特殊化のお隣キーワード
検索ランキング

   

英語⇒日本語
日本語⇒英語
   



テンプレートと明示的特殊化のページの著作権
Weblio 辞書 情報提供元は 参加元一覧 にて確認できます。

   
ウィキペディアウィキペディア
Text is available under GNU Free Documentation License (GFDL).
Weblio辞書に掲載されている「ウィキペディア小見出し辞書」の記事は、Wikipediaのテンプレートの部分特殊化 (改訂履歴)の記事を複製、再配布したものにあたり、GNU Free Documentation Licenseというライセンスの下で提供されています。

©2025 GRAS Group, Inc.RSS