私は次のようなことをしたいと思います:
class A {
public:
void f();
private:
void g() { };
};
class B {
public:
void f();
private:
void g() { };
};
template<typename T>
void T::f() {
g();
}
int main() {
A a;
B b;
a.f();
b.f();
}
ただし、T :: f()はコンパイルされません。
考えられる回避策は、f()を非メンバーにすることです。
template<typename T>
void f(T* t);
またはCRTPを使用する:http://en.wikipedia.org/wiki/Curiously_recurring_template_pattern
しかし、上記のように行うC ++構文はありませんか?
編集:コードが2つのクラスAとBで共有されている大きな関数f()があります。AとBは、f()が使用する同じインターフェイスを持っています。ただし、ランタイムポリモーフィズム(つまり、仮想関数)を使用していないため、f()のコーパスはコンパイル時に2回インスタンス化する必要があります。1回はA用、もう1回はB用です。テンプレートはまさにこの目的のために作成されます。私の場合、関数f()は、テンプレートタイプが*thisのタイプであるテンプレート関数である必要があります。