メンバ関数テンプレート

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

クラスのメンバ関数だけにテンプレートを適応させることもできます。

#include <iostream>
using namespace std;

class CSample {
public:
    template <class T> void output (T& t) {
        cout << t << endl;
    }
};

int main () {
    CSample obj;
    obj.output("foo");
    return 0;
}
$ main
foo

また、テンプレートクラスの場合でもメンバ関数テンプレートを使えます。

#include <iostream>
using namespace std;

template <class T>
class CSample {
public:
    CSample (T t) : m_t(t) {}
    
    template <class U> void output (U& u) {
        cout << m_t << endl;
        cout << u << endl;
    }
private:
    T m_t;
};

int main () {
    CSample<int> obj(100);
    obj.output("foo");
    return 0;
}
$ main
100
foo

この場合、最初のTと別の型Uを使えば、別の型を扱えるようになります。

なんかどんどん見た目がややこしくなっていきますね。テンプレートって。