関数・クラステンプレートのテンプレートパラメータに型以外を使う時,そのパラメータはノンタイプテンプレートパラメータと呼ばれる.
一般的に定数の整数値(enumeratorを含む)や外部リンケージのオブジェクトへのポインタを使う. 浮動小数点数やクラス型のオブジェクトは使えない.
以下のように,整数値をテンプレートパラメータとして使いたい場合は,const int で定義した整数値か整数値を直打ちする.
[code lang="cpp"] /// myTemplate.hpp
ifndef MYTEMPLATE_HPP
define MYTEMPLATE_HPP
// 関数テンプレートのノンタイプパラメータ template <int SIZE> int addSpecial(int x) { return x + SIZE; }
// クラステンプレートのノンタイプパラメータ template <int SIZE> class myArray { public: myArray(); public: float elements[SIZE]; };
template <int SIZE> myArray<SIZE>::myArray() { for(int n = 0; n < SIZE; ++n) { elements[n] = static_cast<float>(n); } }
endif // end of MYTEMPLATE_HPP
[/code]
[code lang="cpp"] /// main.cpp
include <iostream>
include "myTemplate.hpp"
int main() { std::cout << addSpecial<1>(3) << std::endl; std::cout << addSpecial<2>(3) << std::endl; std::cout << addSpecial<3>(3) << std::endl;
const int size_5 = 5;
myArray<size_5> v_5;
for(int n = 0; n < size_5; ++n)
{
std::cout << v_5.elements[n] << std::endl;
}
myArray<3> v_3;
for(int n = 0; n < 3; ++n)
{
std::cout << v_3.elements[n] << std::endl;
}
return 0;
} [/code]