未指定模板参数的C++类指针

5

你好,互联网的地府的亲爱的人们。

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

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

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

X* myClass;

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

有没有任何可能实现这个功能呢?


1
无论如何,是的:void *myClass; 然后 myClass = new X<whatever>;. - Pete Becker
3个回答

5
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; - Pete Becker
糟糕,我的错。我会修复它的。 - user213313

3

编号。指针指向一种类型,而 X 不是一种类型。


2
不要使用X*,考虑使用以下替代方案:
class BaseX { 
    //...
};

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

因为BaseX是一个完整的类型,所以在你定义了它之后,可以有一个引用某个X<Y>BaseX*


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接