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

C++ class pointer without giving template parameters

本文关键字:参数 指针 C++      更新时间:2023-10-16

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

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

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

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

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

这有可能吗?

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

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

不带X* .考虑以下替代方法:

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

由于BaseX是一个完整的类型,因此一旦定义了它,就可以BaseX*引用某些X<Y>