テンプレートの部分特殊化
http://www.geocities.jp/ky_webid/cpp/language/037.html
テンプレートの特殊化の、部分特別バージョンが存在します。
どういったものかというと、例えば同じ型は型でも、ポインタ型の場合の時だけ別処理にするみたいな感じです。
#include <iostream> using namespace std; template<class T> class CSample { public: CSample(T t) : m_t(t) {} T Get() { return m_t; } private: T m_t; }; template<class T> class CSample<T*> { // 任意のポインタ型の場合だけ public: CSample() : m_t(200) {} int Get() { return m_t; } private: int m_t; }; int main () { CSample<int> obj1(100); CSample<int*> obj2; cout << obj1.Get() << endl; cout << obj2.Get() << endl; return 0; }
$ main 100 200
面白いですね。ポインタの時だけ違う処理とかは確かにありえそうです。
ただしこのテンプレートの部分特殊化はVC6等の古いコンパイラではコンパイルできないそうです。
注意が必要ですね。