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
面白いですね。