C ++ подкласс параметризованный класс, и использовать подкласс в качестве специализации - PullRequest
1 голос
/ 12 февраля 2011

Я хочу что-то вроде этого:

class TestParent<class T>
{
    T* some();
}

class TestChild : public TestParent<TestChild>
{};

Возможно ли это?

Спасибо.

Ответы [ 2 ]

4 голосов
/ 12 февраля 2011

Абсолютно! Этот метод часто используется в передовых методах, таких как шаблон любопытного повторения шаблона или для реализации статического полиморфизма Вы многое увидите, если будете заниматься продвинутым программированием на C ++.

2 голосов
/ 12 февраля 2011

Это возможно, но только если вы определите реализацию some, иначе вы столкнетесь с ошибками компиляции.Возможно, вы также захотите добавить защищенный конструктор, чтобы ваш базовый класс не мог быть создан и использован вне того, как вы его определяете в области заголовка.

template<typename T>
class TestParent{
    public:

        T* some() { return new T(); }

    //this is suggested
    protected:
        TestParent(){}
};

class TestChild : public TestParent<TestChild>{}

Это используется в любопытном шаблон рекурсивного шаблона и другие методы из основанного на политике дизайна , ставшего популярным благодаря книге Александреску .

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