28章 テンプレート引数

http://www.geocities.jp/ky_webid/cpp/language/028.html

インスタンス化する際に渡せる引数のようなものです。

兎にも角にも実装してみます。

#include <iostream>
using namespace std;

template <class T, int NUM>
class CSample {
public:
    CSample (T t) : m_t(t) {}
    void output () {
        for(int i=0;i<NUM;i++) {
            cout << m_t << endl;
        }
    }
private:
    T m_t;
};

int main() {
    CSample<int, 5> obj(123);
    
    obj.output();
    
    return 0;
}
$ main
123
123
123
123
123

テンプレートって凄く便利ですね。なんか面白いこと色々できそうで夢が広がります。今は何も思いついてませんが。

さてこのテンプレート引数ですが、指定されなかった場合にデフォルトで格納される値をセットすることもできます。

#include <iostream>
using namespace std;

template <class T, int NUM = 1> // デフォルト値の指定
class CSample {
public:
    CSample (T t) : m_t(t) {}
    void output () {
        for(int i=0;i<NUM;i++) {
            cout << m_t << endl;
        }
    }
private:
    T m_t;
};

int main() {
    CSample<char*>  obj1("abc"); // デフォルト引数が使われる
    CSample<int, 5> obj2(123);
    
    obj1.output();
    obj2.output();
    
    return 0;
}
$ main
abc
123
123
123
123
123

面白いですね。