2010-09-26 151 views
0

我有一個類Helper問題的模板專業化和模板的模板參數

template <typename T, template <typename> E> 
class Helper { 
    ... 
}; 

我有另一個類模板,Exposure,這是同時本身傳遞作爲模板的模板參數EHelper繼承。我也需要專門Exposure。因此,我想寫點東西像下面這樣:

template <> 
class Exposure<int> : public Helper<int, Exposure> { 
    Exposure() : Helper<int, Exposure>() { 
     ... 
    }; 
    ... 
}; 

不幸的是這不會編譯。 gcc抱怨:

Exposure.h:170: error: type/value mismatch at argument 2 in template parameter list for `‘template > class ExposureHelper’

Exposure.h:170: error: expected a constant of type ‘’, got ‘Exposure’

我做錯了什麼?對於我想要做的事情有沒有解決方法?

回答

0

在用於輔助你的第一個模板,你不必說,第二個參數是一個模板:

template <typename T, typename E> 
class Helper { 
    ... 
}; 

而且你可以宣佈一個與模板作爲參數:

Helper<vector<int>, vector<char> > h; 

但是在你的第二個模板中,你有一個循環定義。你的暴露等級取決於你的暴露等級。這將創建一個循環引用,並且在可以從Exposure繼承之前,Helper類需要Exposure的定義。您可能需要重組您的課程。

2

,如果你真的想通過模板而不是類

template <typename T, template<typename> class E> 
class Helper { 
}; 

template <typename T> 
class Exposure; 

template <> 
class Exposure<int> : public Helper<int, Exposure > { 
}; 

,或者如果你的目的是不同的

template <typename T, typename E> 
class Helper { 
}; 

template <typename T> 
class Exposure; 

template <> 
class Exposure<int> : public Helper<int, Exposure<int> > { 
};