2012-10-01 65 views
3

你好親愛的人稱之爲互聯網。沒有給出模板參數的C++類指針

假設我們有一個名爲X與模板參數(Y)類:

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

,我想沒有(沒有)模板參數來創建類的實例,然後定義指針與模板參數:

X* myClass; 

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

這是可能的任何方式?

+1

好,**以任何方式**,是的:'無效* MyClass的;''然後MyClass的=新的X​​;'。 –

回答

3

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

'X'不是一個不完整的類型。這是一個模板的名稱,而不是一個類型。不完整的類型是已聲明但未定義的類型,如'class C;'。 –

+0

哎呀,我的壞。我會解決這個問題。 –

3

不。指針指向一個類型,而X不是一個類型。

2

不與。考慮這個選擇:

class BaseX { 
    //... 
}; 

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

由於BaseX是一個完整的類型,你可以有BaseX*引用一些X<Y>一旦你定義它。

相關問題