[英]how to specialize the template
考慮現有情況
template<typename T, int N = 10>
struct A
{
//whatever
};
template <typename T1,typename T2, typename T3>
struct B;
template<typename T2, typename T3>
struct B<double,T2,T3>
{
//...
protected:
A<T2> myA;
};
現在我感興趣的是能夠通過不同於默認N
到A
在專業化B
不改變的聲明B
。 可能嗎?
我可以考慮一下
template<typename T2, typename T3, int N>
struct B<double,T2,T3>
{
//...
protected:
A<T2,N> myA;
};
但后來我不確定如何使用它......
好吧,你的B
級只能這樣使用:
B<double, C, D> b;
C
和D
本身就是類型。
你不能在那里傳遞數字。 專業化不會幫助你。 專業化不會改變您可以使用類的方式或可以傳遞的參數,但您只能更改某個參數集的實現。 照這樣說,
我建議將B
的聲明改為:
template <typename, typename, typename, int = 10>
struct B;
Ans的專業化是這樣的:
template<typename T2, typename T3, int N>
struct B<double,T2,T3, N> {
//...
protected:
A<T2, N> myA;
};
所以你的課程既像以前一樣可用,就像這樣:
B<double, C, D, 11> b;
如果你真的無法改變參數是什么,你可以進一步專門化它來接收一個帶有數字作為模板參數的類型:
template<typename, int>
struct TypeAndNumber {};
並將你的社交化改變為:
template<typename T2, typename T3, int N>
struct B<TypeAndNumber<double, N>, T2, T3> {
//...
protected:
A<T2, N> myA;
};
現在你的課可以這樣使用:
B<TypeAndNumber<double, 33>, C, B> b;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.