savant
@savant

Как получить указатель на шаблонный класс?

Есть шаблонный класс и его специализации, возможно ли получить "обобщённый" указатель для разных специализаций, чтобы можно было использовать код по типу приведённого ниже?

template<int p> class A {
        public:
        int foo();
};

template<> class A<1> {
        public:
        int foo() {
                return 1;
        }
};

template<> class A<2> {
        public:
        int foo() {
                return 2;
        }
};

int main(int argc, char** argv){
        A<1> a1;
        A<2> a2;
        A* a3 = &a2;
        std::cout << a1.foo() << std::endl << a2.foo() << std::endl << a3->foo() << std::endl;
        return 0;
}
  • Вопрос задан
  • 3955 просмотров
Решения вопроса 1
savant
@savant Автор вопроса
В итоге получилось так:

#include <iostream>

class AA {
        public:
        virtual int foo() = 0;
};

template<int p> class A : public AA {};

template<> class A<1> :public AA {
        public:
        int foo() {
                return 1;
        }
};

template<> class A<2> : public AA {
        public:
        int foo() {
                return 2;
        }
};

int main(int argc, char** argv){
        A<1> a1;
        A<2> a2;
        AA* a3 = &a2;
        std::cout << a1.foo() << std::endl << a2.foo() << std::endl << a3->foo() << std::endl;
        return 0;
}
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
jcmvbkbc
@jcmvbkbc
"I'm here to consult you" © Dogbert
возможно ли получить "обобщённый" указатель для разных специализаций

Нет, поскольку специализации шаблона -- разные типы, не связанные никакими отношениями.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы