Могу ли я переопределить и использовать подкласс для типа шаблона в качестве суперкласса - PullRequest
3 голосов
/ 14 марта 2012

Могу ли я переопределить и использовать подкласс для типа шаблона в качестве суперкласса.

Я программист на Java, и это хорошо работает с дженериками, однако я не знаю, как многое сделать в C ++

Могу ли я использовать класс

template <typename T>
class A{
public:
    T get(){
        return t;
    }
    A(){
    }
    void set(T tt){
        t=tt;
    }
private: 
    T t;
};

И расширить его чем-то похожим на

class B:A<B> 

Если подкласс B используется в качестве универсального типа для класса A, а класс B не требует универсальных типов

Ответы [ 2 ]

1 голос
/ 14 марта 2012

В принципе, использование вами шаблонов называется "Любопытно повторяющимся шаблоном шаблона" (CRTP) и совершенно допустимо.

Однако следует помнить, что универсальные шаблоны Java и шаблоны C ++ сильно различаются во многих аспектах, включаяограничения на использование B в A. Производные классы CRTP неполны при создании экземпляра шаблона, поэтому вы не можете выделить их объекты в базовом классе, как вы это сделали.Вот почему ваш код не компилируется .Обычный метод - вместо этого приводить методы доступа, такие как:

 void set(T tt){
    static_cast<T&>(*this)=tt;
 }
0 голосов
/ 14 марта 2012
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...