【问题标题】:C++ class pointer without giving template parameters不提供模板参数的 C++ 类指针
【发布时间】:2012-09-22 15:55:48
【问题描述】:

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

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

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

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

X* myClass;

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

这有可能吗?

【问题讨论】:

  • 嗯,无论如何,是的:void *myClass; 然后myClass = new X&lt;whatever&gt;;

标签: c++ class templates variables pointers


【解决方案1】:

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

【讨论】:

  • X 不是不完整的类型。它是模板的名称,根本不是类型。不完整类型是已声明但未定义的类型,如class C;
  • 糟糕,我的错。我会解决的。
【解决方案2】:

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

【讨论】:

    【解决方案3】:

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

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

    由于BaseX 是一个完整的类型,所以一旦定义了BaseX*,它就可以引用一些X&lt;Y&gt;

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-02-03
      • 1970-01-01
      • 1970-01-01
      • 2016-12-16
      • 1970-01-01
      • 1970-01-01
      • 2019-10-20
      相关资源
      最近更新 更多