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

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

一般的に定数の整数値(enumeratorを含む)や外部リンケージのオブジェクトへのポインタを使う.
浮動小数点数やクラス型のオブジェクトは使えない.

以下のように,整数値をテンプレートパラメータとして使いたい場合は,const int で定義した整数値か整数値を直打ちする.

/// 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__

/// 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;
}
Advertisements

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s