Шаблоны C ++ с интерфейсными объектами

У меня есть следующий код, который не компилируется.

class Base {
    public:
        virtual ~Base() { };
};

class Derived : public Base { };

class NotDerived { };

template 
class Group { };

int main() {
    Group *g = NULL;

    g = new Group();       // Works
    g = new Group();    // Error, but I want it to work

    g = new Group(); // Error, as expected
}

Я понимаю, что он не будет компилироваться, потому что g - это другой тип, чем Group . Чтобы это работало на Java, я бы сделал что-нибудь вроде Group extends Base> g , но, насколько мне известно, в C ++ нет этого ключевого слова. Что можно сделать?

Edit: Я хотел бы уточнить, что я не хочу, чтобы можно было устанавливать типы, не производные от Base как g . Я обновил свой пример, чтобы объяснить это.

Редактировать 2: Есть два решения моей проблемы. Дэйва я обнаружил, что он простой и легкий для определения. Но Боуи (вместе с дополнениями Марка ) больше соответствовали моим потребностям.

7
задан Community 23 May 2017 в 12:16
поделиться