I am Charmie

メモとログ

ノンタイプテンプレートパラメータ

関数・クラステンプレートのテンプレートパラメータに型以外を使う時,そのパラメータはノンタイプテンプレートパラメータと呼ばれる.

一般的に定数の整数値(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&lt;size_5&gt; v_5;

for(int n = 0; n &lt; size_5; ++n)
{
    std::cout &lt;&lt; v_5.elements[n] &lt;&lt; std::endl;
}

myArray&lt;3&gt; v_3;

for(int n = 0; n &lt; 3; ++n)
{
    std::cout &lt;&lt; v_3.elements[n] &lt;&lt; std::endl;
}

return 0;

} [/code]