JavaScript is required to for searching.
ナビゲーションリンクをスキップ
印刷ビューの終了
Oracle Solaris Studio 12.3: C++ ユーザーズガイド     Oracle Solaris Studio 12.3 Information Library (日本語)
search filter icon
search icon

ドキュメントの情報

はじめに

パート I C++ コンパイラ

1.  C++ コンパイラの紹介

2.  C++ コンパイラの使用方法

3.  C++ コンパイラオプションの使い方

パート II C++ プログラムの作成

4.  言語拡張

5.  プログラムの編成

6.  テンプレートの作成と使用

6.1 関数テンプレート

6.1.1 関数テンプレートの宣言

6.1.2 関数テンプレートの定義

6.1.3 関数テンプレートの使用

6.2 クラステンプレート

6.2.1 クラステンプレートの宣言

6.2.2 クラステンプレートの定義

6.2.3 クラステンプレートメンバーの定義

6.2.3.1 関数メンバーの定義

6.2.3.2 静的データメンバーの定義

6.2.4 クラステンプレートの使用

6.3 テンプレートのインスタンス化

6.3.1 テンプレートの暗黙的インタンス化

6.3.2 テンプレートの明示的インスタンス化

6.3.2.1 テンプレート関数の明示的インスタンス化

6.3.2.2 テンプレートクラスの明示的インスタンス化

6.3.2.3 テンプレートクラス関数メンバーの明示的インスタンス化

6.3.2.4 テンプレートクラスの静的データメンバーの明示的インスタンス化

6.4 テンプレートの編成

6.5 デフォルトのテンプレートパラメータ

6.6 テンプレートの特殊化

6.6.1 テンプレートの特殊化宣言

6.6.2 テンプレートの特殊化定義

6.6.3 テンプレートの特殊化の使用とインスタンス化

6.6.4 部分特殊化

6.7 テンプレートの問題

6.7.1 非局所型名前の解決とインスタンス化

6.7.2 テンプレート引数としての局所型

6.7.3 テンプレート関数のフレンド宣言

6.7.4 テンプレート定義内での修飾名の使用

6.7.5 テンプレート名の入れ子

6.7.6 静的変数や静的関数の参照

6.7.7 テンプレートを使用して複数のプログラムを同一ディレクトリに構築する

7.  テンプレートのコンパイル

8.  例外処理

9.  プログラムパフォーマンスの改善

10.  マルチスレッドプログラムの構築

パート III ライブラリ

11.  ライブラリの使用

12.  C++ 標準ライブラリの使用

13.  従来の iostream ライブラリの使用

14.  ライブラリの構築

パート IV 付録

A.  C++ コンパイラオプション

B.  プラグマ

用語集

索引

6.1 関数テンプレート

関数テンプレートは、引数または戻り値の型だけが異なった、関連する複数の関数を記述したものです。

6.1.1 関数テンプレートの宣言

テンプレートは使用する前に宣言する必要があります。次の例のように、宣言によってテンプレートを使用するのに十分な情報は提供されますが、テンプレートを実装するには十分ではありません。

template <class Number> Number twice( Number original );

この例では Numberテンプレートパラメータであり、テンプレートが記述する関数の範囲を指定します。つまり、Numberテンプレート型のパラメータです。テンプレート定義内で使用すると、型はテンプレートを使用するときに特定されることになります。

6.1.2 関数テンプレートの定義

テンプレートは宣言と定義の両方が必要になります。テンプレートを定義することで、実装に必要な情報が得られます。次の例は、前述の例で宣言されたテンプレートを定義しています。

template <class Number> Number twice( Number original )
    { return original + original; }

テンプレート定義は通常ヘッダーファイルで行われるので、テンプレート定義が複数のコンパイル単位で繰り返される可能性があります。しかし、すべての定義は同じである必要があります。この制限は「単一定義ルール」と呼ばれています。

6.1.3 関数テンプレートの使用

テンプレートは、いったん宣言するとほかのすべての関数と同様に使用することができます。テンプレートの使用は、そのテンプレートの命名と関数引数の提供で構成されます。コンパイラは、テンプレート型引数を、関数引数の型から推測します。たとえば、以前に宣言されたテンプレートを次のように使用できます。

double twicedouble( double item )
    { return twice( item ); }

テンプレート引数が関数の引数型から推測できない場合、その関数が呼び出される場所にその引数を指定する必要があります。例:

template<class T> T func(); // no function arguments
int k = func<int>(); // template argument supplied explicitly