的,我想这样做:模板成员函数(在T型)的非模板T类
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的类型。
上述(wiki)是一个完美的有效C++语法。但我看到你问了什么,我说不,没有做到这一点的速记。据我所知,至少在C++ 03的世界里。 – nullpotent
你想达到什么目的?您无法将多个定义缩减为一个“模板”定义。不过,您可以使用预处理器实现类似的效果。 –
你想做什么?没有编写的语法,只是一个解释。 –