MochiuWiki : SUSE, EC, PCB
案内
メインページ
最近の更新
おまかせ表示
MediaWiki についてのヘルプ
ツール
リンク元
関連ページの更新状況
特別ページ
ページ情報
We ask for
Donations
検索
個人用ツール
ログイン
Toggle dark mode
名前空間
ページ
議論
表示
閲覧
ソースを閲覧
履歴を表示
C++の基礎 - テンプレートのソースを表示
提供: MochiuWiki : SUSE, EC, PCB
←
C++の基礎 - テンプレート
あなたには「このページの編集」を行う権限がありません。理由は以下の通りです:
この操作は、次のグループのいずれかに属する利用者のみが実行できます:
管理者
、new-group。
このページのソースの閲覧やコピーができます。
== 概要 == C++には多くのデータ型が存在する。<br> int型やdouble型、char型、std::string型など、自作のデータ型も含めれば無数に存在する。<br> <br> 型というのは不自由なもので、型を決定することで、そのコード自体を不自由にしてしまう可能性がある。<br> <br> オーバーロード機能を使えば同名で多重定義することも可能であるが、型は無数に存在するので無数に記述しなければならい。<br> また、オーバーロード機能を使用する場合、開発者はユーザがどのような型を使用するのか予知する必要がある。<br> <br><br> == 関数テンプレート == 開発者は、様々な型に対して適応できるコードで記述する必要がある。<br> 以下のソースコードは、様々な型の加算ができる関数である。<br> この関数の場合、+演算子を使用できない型はコンパイル時にエラーが出力される。<br> <source lang="c++"> template<typename T> T Add(T a, T b) { return a + b; } // 2つ以上の引数を取ることもできる // T = UまたはT ≠ Uであってもこの関数が使用できる template<typename T, typename U> T Add(T a,U b) { return a + b; } </source> <br> また、template<class T>と記述することで、Tを任意の型として関数内で使用できる。<br> <br><br> == テンプレートの特殊化 == テンプレートには、特定の型だけ異なる処理を行うテンプレートの特殊化の機能がある。<br> <source lang="c++"> template <typename T> T add(T a,T b) { return a + b; } // double型だけ異なる処理を行う template <> double add(double a, double b) { return a - b; } </source> <br><br> == 関数クラスメンバエイリアステンプレート == 以下に示す通り、テンプレートは数種類が存在する。<br> * 関数テンプレート * クラステンプレート * メンバテンプレート * エイリアステンプレート <br> ===== 関数テンプレート ===== <source lang="c++"> template <typename T> T add(T a, T b) { return a + b; } </source> <br> ===== クラステンプレート ===== 宣言方法は、下記のようにすると、テンプレート引数に指定した型を持つようになる。<br> <source lang="c++"> CMyClass<int> clsHoge(); // テンプレートクラスのインスタンス生成 </source> <source lang="c++"> template <typename T> class CMyClass { public: CMyClass() {}; virtual ~CMyClass() {}; T value; }; </source> <br> ===== メンバテンプレート ===== 任意のメンバ関数にだけ関数テンプレートを使用することもできる。<br> 定義方法は、関数テンプレートとほぼ同じである。<br> <source lang="c++"> class CMyClass { public: int nanika; public: template<typename T> T Function(T a,T b); }; </source> <br> ===== エイリアステンプレート ===== C++11から、typedefをusingで記述できるようになった。<br> 以下の2つは同様の意味を持つ。<br> <source lang="c++"> typedef TypographicError typo; using typo = TypographicError; </source> <br> また、usingを用いたエイリアスにはテンプレートを使用することができる。<br> このように、型のエイリアスの作成、テンプレート引数の再編成などが行える。<br> <source lang="c++"> UsingTemplate.cpp template<typename T, typename U> T Add1(T a, U b); template<typename T> using Add2 = Add1<T, T>; </source> <br><br> __FORCETOC__ [[カテゴリ:C++]]
C++の基礎 - テンプレート
に戻る。
案内
メインページ
最近の更新
おまかせ表示
MediaWiki についてのヘルプ
ツール
リンク元
関連ページの更新状況
特別ページ
ページ情報
We ask for
Donations
Collapse