dbx は C++ テンプレートをサポートしています。クラスおよび関数テンプレートを含むプログラムを dbx に読み込み、クラスや関数に対して使用する任意の dbx コマンドをテンプレートに対して次のように呼び出すことができます。
クラスまたは関数テンプレートのインスタンス化にブレークポイントを設定する
すべてのクラスおよび関数テンプレートのインスタンス化のリストを出力する
テンプレートおよびインスタンスの定義を表示する
メンバーテンプレート関数と関数テンプレートのインスタンス化を呼び出す
関数テンプレートのインスタンス化の値を出力する
関数テンプレートのインスタンス化のソースコードを表示する
次のコード例は、クラステンプレート Array とそのインスタンス化、および関数テンプレート square とそのインスタンス化を示しています。
この例の内容は次のとおりです。
Array はクラステンプレート
square は関数テンプレート
Array<int> はクラステンプレートインスタンス化 (テンプレートクラス)
Array<int>::getlength はテンプレートクラスのメンバー関数
square(int, int*) と square(double, double*) は関数テンプレートのインスタンス化 (テンプレート関数)
1 template<class C> void square(C num, C *result) 2 { 3 *result = num * num; 4 } 5 6 template<class T> class Array 7 { 8 public: 9 int getlength(void) 10 { 11 return length; 12 } 13 14 T & operator[](int i) 15 { 16 return array[i]; 17 } 18 19 Array(int l) 20 { 21 length = l; 22 array = new T[length]; 23 } 24 25 ‾Array(void) 26 { 27 delete [] array; 28 } 29 30 private: 31 int length; 32 T *array; 33 }; 34 35 int main(void) 36 { 37 int i, j = 3; 38 square(j, &i); 39 40 double d, e = 4.1; 41 square(e, &d); 42 43 Array<int> iarray(5); 44 for (i = 0; i < iarray.getlength(); ++i) 45 { 46 iarray[i] = i; 47 } 48 49 Array<double> darray(5); 50 for (i = 0; i < iarray.getlength(); ++i) 51 { 52 iarray[i] = i * 2.1; 53 } 54 55 return 0; 56 }