你好亲爱的黑社会称为互联网。
假设我们有一个名为 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();
不,指针指向类型,而X
不是类型。
不与X*
. 考虑这个替代方案:
class BaseX {
//...
};
template<class Y>
class X : public BaseX
{
//...
};
因为BaseX
它是一个完整的类型,所以一旦定义了它,就BaseX*
可以引用一些。X<Y>