我有一个C ++类,意味着要继承。它的所有孩子都将继承一种方法:
class Record {
public:
RETTYPE* all();
};
class Child : public Record {
int age;
char *name;
};
int main() {
Child boo;
Child boos* = boo->all(); // Pointer to array of Children
return 0;
};
如何让方法返回(指向)本身?我不能只说Record all();
因为Child
不是Record
。永远不会在Record
上调用该方法。总是在某个继承自Record
。
答案 0 :(得分:3)
这是一种方式
class Record {
};
template<class T>
class RecordOf : public Record {
public:
T* all();
};
class Child : public RecordOf<Child> {
int age;
char *name;
};
现在每个子类都有一个返回确切类型的all方法。您可以在Record
中的子类中放置虚拟且具有相同签名的方法,并在RecordOf
中放置依赖于确切类型的方法。
它被称为奇怪的重复模板模式
http://en.wikipedia.org/wiki/Curiously_recurring_template_pattern