2011-07-18 61 views
4

我似乎無法找到正確的語法,專注這個模板:如何專門與繼承一個複雜的模板 - C++

template <class Object, class Var, class Invert, class Step = Var, unsigned int FIXED = IW_GEOM_POINT> 
class TSin : public BasicTween<Object, Var> {... 

我想保持<Object>作爲模板參數,但專門的所有其他參數。我正在嘗試像這樣:

template <class Object> 
class TSin<Object, CIwVec2, int, CIwVec2, IW_GEOM_POINT> {... 

這給出錯誤。

請有人提供正確的語法來專門化模板和語法來實例化專用版本嗎?

+5

有什麼錯誤? – DanDan

+0

你的編譯器是什麼?此外,請創建一個重現錯誤的最小完整示例。你的描述和語法看起來很好 –

+1

你的代碼(因爲部分專業化)是好的。在你試圖使用這個專業化的地方,最有可能發生問題 - 可能會發佈一個片段? – Nim

回答

0

錯誤是您正在重新定義。我認爲你不能這樣做。

什麼你可以要做的就是聲明通用模板和專業類的定義:

template <class Object, class Var, class Invert, class Step = Var, 
    unsigned int FIXED = IW_GEOM_POINT> 
    class TSin; 
template <class Object> 
    class TSin<Object, CIwVec2, int, CIwVec2, IW_GEOM_POINT> {... 

或專業類成員的定義:

template <class Object> 
void TSin<Object, CIwVec2, int, CIwVec2, IW_GEOM_POINT>::Foo(...) {... 

或聲明子類:

template <class Object, class Var, class Invert, class Step = Var, 
    unsigned int FIXED = IW_GEOM_POINT> 
    class TSin : public BasicTween<Object, Var> {... 
template <class Object> 
    class SpecialTSin::public TSin<Object, CIwVec2, int, CIwVec2, IW_GEOM_POINT> 
{... 

I認爲後者是最好的選擇。

+0

他沒有重新定義TSin。他正在做部分專業化(你的選擇1) –

+0

你絕對可以做到這一點。最初的定義是非專業化的基礎案例。 – Puppy

+0

@DeadMG:但是這怎麼可能呢?如果給定的一組模板參數可以解析爲基本*定義*或專用*定義*如果有重疊的專業?如果專業化對一個編制單位而不是其他單位是可見的呢?它看起來像一個痛苦的食譜。 –

1

我覺得你的代碼應該看起來像在這裏:http://ideone.com/cvGy3

您需要定義所有類型的類的實例。

+0

鏈接不再工作。 –