多态类作为模板参数

时间:2018-04-23 15:37:01

标签: c++ templates polymorphism

我有多态类,它将另一个多态类作为模板参数。

我想做这样的事情:

class A{ public: virtual ~A() = default; };

class B : public A{};
class C : public A{};


template<typename A>
class X{ public: virtual ~X() = default; };

class Y : public X<B>{};
class Z : public X<C>{};


int main(void)
{
    X<A> *test = new Y();
    (void)test;

    return 0;
}

但我得到了这个错误:

error: cannot convert 'Y*' to 'X<A>*' in initialization
X<A> *test = new Y();

目标是拥有一些X实例的容器:

std::vector<std::unique_ptr<X<A>>> data;
data.push_back( std::make_unique<Y>() );
data.push_back( std::make_unique<Z>() );

我该怎么办?

0 个答案:

没有答案