Дочерний класс как тип возвращаемого значения для метода класса - PullRequest
1 голос
/ 06 августа 2010

У меня есть класс 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 Ответ

3 голосов
/ 06 августа 2010

Вот один из способов

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...