C ++类指针没有给出模板参数

时间:2012-10-01 19:04:45

标签: c++ class templates variables pointers

你好,亲爱的黑社会人士称之为互联网。

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

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

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

X* myClass;

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

这有可能吗?

3 个答案:

答案 0 :(得分:3)

没有。指针指向一个类型,而X不是一个类型。

答案 1 :(得分:3)

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();

答案 2 :(得分:2)

不在X*。考虑这个替代方案:

class BaseX { 
    //...
};

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

由于BaseX是完整类型,因此一旦您定义了BaseX*,就可以X<Y>引用{{1}}。