Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
学ぶ 概要 | テンプレート特殊化
C++テンプレート

book概要

メニューを表示するにはスワイプしてください

テンプレートは、開発者が汎用的で再利用可能なコードを作成できるようにし、プログラムの柔軟性と保守性を大幅に向上させる仕組み。ここでは、本コースで扱う主要な概念とセクションの概要をまとめる。

テンプレートの作成

テンプレートを作成する構文は、template キーワードの後に山括弧で囲まれたテンプレートパラメータを記述する形式。以下は、パラメータを取らない基本的なテンプレート関数の例。

template.h

template.h

copy
12
template<typename> void SimpleTemplate() {}

テンプレートとパラメータ

テンプレートはパラメータを受け取ることもでき、より柔軟に利用可能。ここでは、汎用型 T の単一パラメータを受け取るテンプレート関数の作成方法を示す。これにより、インスタンス化時に指定された任意のデータ型で関数を利用可能。

single_parameter.h

single_parameter.h

multiple_parameters.h

multiple_parameters.h

copy
12
template<typename T> void SimpleTemplate(T value) {}

クラステンプレート

テンプレートはクラスにも適用でき、パラメータ化されたクラス定義の作成が可能。次の例は、汎用型 T の値を格納し、初期化用のコンストラクタを持つクラステンプレートの作成方法を示す。

class_template.h

class_template.h

copy
1234567
template<typename T> class ClassTemplate { private: T value; public: ClassTemplate(T value) : value(value) {} };

テンプレートの特殊化

テンプレートの特殊化は、特定のデータ型に対してテンプレートの個別実装を作成する手法。汎用的な実装では十分でない場合や、特別な動作が必要な場合に有用。次の例は、intboolstd::string など異なるデータ型に対してテンプレート関数を特殊化する方法を示す。

specialization.h

specialization.h

copy
1234567891011
template <typename T> void Template(const T& value) { /* ... */ } // Any Type template <> void Template<int>(const T& value) { /* ... */ } // For `int` template <> void Template<bool>(const T& value) { /* ... */ } // For `bool` template <> void Template<std::string>(const T& value) { /* ... */ } // For `std::string`
すべて明確でしたか?

どのように改善できますか?

フィードバックありがとうございます!

セクション 4.  5

AIに質問する

expand

AIに質問する

ChatGPT

何でも質問するか、提案された質問の1つを試してチャットを始めてください

セクション 4.  5
some-alt