我有以下不编译的代码.
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
}
Run Code Online (Sandbox Code Playgroud)
我知道这不会编译,因为它g是一种不同的类型Group<Derived>.为了在Java中工作,我会做一些事情Group<? extends Base> g,但据我所知,C++没有那个关键字.可以做些什么?
编辑:我想澄清,我不希望它可以设置不从派生类型Base的g.我已经更新了我的例子来解释这一点.
编辑2:我的问题有两个解决方案. 戴夫的发现简单易行.但 …