У меня есть следующий код, который не компилируется.
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: Есть два решения моей проблемы. Дэйва я обнаружил, что он простой и легкий для определения. Но Боуи (вместе с дополнениями Марка ) больше соответствовали моим потребностям.