C++ C++;不提供模板参数的类指针

C++ C++;不提供模板参数的类指针,c++,class,templates,variables,pointers,C++,Class,Templates,Variables,Pointers,你好,亲爱的黑社会的人们,他们叫互联网 假设我们有一个名为X的类,带有模板参数(Y): 模板 X类 { //... }; 我想创建一个没有(尚未)模板参数的类实例,然后用模板参数定义指针: X* myClass; //.... myClass = new X<variable>(); X*myClass; //.... myClass=新的X(); 这有可能吗?没有。指针指向一个类型,而X不是一个类型。不使用X*。考虑这个替代方案: class BaseX { //

你好,亲爱的黑社会的人们,他们叫互联网

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

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

X* myClass;

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

这有可能吗?

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

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

class BaseX { 
    //...
};

template<class Y>
class X : public BaseX
{
    //...
};
classbasex{
//...
};
模板
第X类:公共BaseX
{
//...
};

由于
BaseX
是一个完整的类型,一旦定义了
BaseX*
,就可以使用它引用一些
X

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();
struct接口
{
接口(){}
虚拟~Interface(){}
虚空doSomething()=0;
};
模板
X类:公共接口
{
//...
虚拟void doSomething()覆盖;
};
std::unique_ptr myClass;
//....
重置(新的X());
myClass->doSomething();

无论如何,是的:
void*myClass然后
myClass=newx
X
不是不完整的类型。它是模板的名称,而不是类型。不完整类型是一种已声明但未定义的类型,如
class C.Oops,我的错。我会把它修好的。
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();