Child类作为类方法的返回类型

时间:2010-08-06 17:44:31

标签: c++ class methods

我有一个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

的类上

1 个答案:

答案 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