你好親愛的人稱之爲互聯網。沒有給出模板參數的C++類指針
假設我們有一個名爲X與模板參數(Y)類:
template<class Y>
class X
{
//...
};
,我想沒有(沒有)模板參數來創建類的實例,然後定義指針與模板參數:
X* myClass;
//....
myClass = new X<variable>();
這是可能的任何方式?
你好親愛的人稱之爲互聯網。沒有給出模板參數的C++類指針
假設我們有一個名爲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'不是一個不完整的類型。這是一個模板的名稱,而不是一個類型。不完整的類型是已聲明但未定義的類型,如'class C;'。 –
哎呀,我的壞。我會解決這個問題。 –
不。指針指向一個類型,而X
不是一個類型。
不與。考慮這個選擇:
class BaseX {
//...
};
template<class Y>
class X : public BaseX
{
//...
};
由於BaseX
是一個完整的類型,你可以有BaseX*
引用一些X<Y>
一旦你定義它。
好,**以任何方式**,是的:'無效* MyClass的;''然後MyClass的=新的X;'。 –