我想做类似的事情:
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++ 语法可以像上面那样做吗?
编辑:我有一个大函数 f(),其代码由 2 个类 A 和 B 共享。A 和 B 具有相同的接口,f() 使用。但是,因为我们没有使用运行时多态性(即虚函数),所以 f() 的语料库需要在编译时实例化两次,一次用于 A,一次用于 B。模板正是为此目的而制作的。就我而言,函数 f() 应该是模板函数,其模板类型是 *this 的类型。