小编Rya*_*yan的帖子

带有接口对象的C++模板

我有以下不编译的代码.

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:我的问题有两个解决方案. 戴夫的发现简单易行.但 …

c++ inheritance templates

7
推荐指数
2
解决办法
5384
查看次数

标签 统计

c++ ×1

inheritance ×1

templates ×1