你好,互联网的地府的亲爱的人们。
假设我们有一个名为X的类,其模板参数为(Y):
template<class Y>
class X
{
//...
};
我想创建一个没有(尚未)模板参数的类实例,然后在定义指针时使用模板参数:
X* myClass;
//....
myClass = new X<variable>();
有没有任何可能实现这个功能呢?
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编号。指针指向一种类型,而 X
不是一种类型。
X*
,考虑使用以下替代方案:class BaseX {
//...
};
template<class Y>
class X : public BaseX
{
//...
};
因为BaseX
是一个完整的类型,所以在你定义了它之后,可以有一个引用某个X<Y>
的BaseX*
。
void *myClass;
然后myClass = new X<whatever>;
. - Pete Becker