簡體   English   中英

如何專門化模板

[英]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;
};

現在我感興趣的是能夠通過不同於默認NA在專業化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;

CD本身就是類型。

你不能在那里傳遞數字。 專業化不會幫助你。 專業化不會改變您可以使用類的方式或可以傳遞的參數,但您只能更改某個參數集的實現。 照這樣說,

我建議將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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM