4

你好亲爱的黑社会称为互联网。

假设我们有一个名为 X 的类,其模板参数(Y):

template<class Y>
class X
{
    //...
};

我想创建一个没有(还没有)模板参数的类的实例,然后用模板参数定义指针:

X* myClass;

//....
myClass = new X<variable>();

这有可能吗?

4

3 回答 3

4

X 不是没有模板参数的类型,所以不,不幸的是不是。如果 X 有一个定义了你想使用的接口的基类,你就可以实现你想要的。

例如,

struct Interface
{
    Interface() {}
    virtual ~Interface(){}

    virtual void doSomething() = 0;
};

template <class Y>
class X : public Interface
{
    //...
    virtual void doSomething() override;
};

std::unique_ptr<Interface> myClass;

//....
myClass.reset(new X<variable>());
myClass->doSomething();
于 2012-10-01T19:16:27.437 回答
3

不,指针指向类型,而X不是类型。

于 2012-10-01T19:07:03.093 回答
2

不与X*. 考虑这个替代方案:

class BaseX { 
    //...
};

template<class Y>
class X : public BaseX
{
    //...
};

因为BaseX它是一个完整的类型,所以一旦定义了它,就BaseX*可以引用一些。X<Y>

于 2012-10-01T19:14:16.907 回答