У меня есть следующий код, который не компилируется.
class Base {
public:
virtual ~Base() { };
};
class Derived : public Base { };
class NotDerived { };
template <typename T>
class Group { };
int main() {
Group<Base> *g = NULL;
g = new Group<Base>(); // Works
g = new Group<Derived>(); // Error, but I want it to work
g = new Group<NotDerived>(); // Error, as expected
}
Я понимаю, что это не скомпилируется, потому что g
отличается от Group<Derived>
.Чтобы сделать это в Java, я бы сделал что-то вроде Group<? extends Base> g
, но, насколько мне известно, в C ++ этого ключевого слова нет.Что можно сделать?
Изменить: Я хотел бы уточнить, что я не хочу, чтобы можно было установить типы, не производные от Base
, как g
.Я обновил свой пример, чтобы объяснить это.
Редактировать 2: Есть два решения моей проблемы. Дейва Я обнаружил, что его просто и легко определить.Но Боуи (вместе с Марком дополнений) лучше соответствовал моим потребностям.