簡體   English   中英

使用繼承的類模板

[英]Using a inherited class template

在以下摘錄中,如何訪問繼承的Sub類模板?

據我所理解,下面這個星座的問題是基類Base本身是一個依賴類。 使用typename / template可以訪問它,但是如果經常需要Sub則很麻煩。

template<int B>
struct Base {
    template<int S>
    class Sub { };
};

template<int C>
struct Class: public Base<C> {
    // (1) Error: 'Sub' does not name a type
    using S2 = Sub<2>;

    // (2) Error: 'Base' used without template argument list
    using S3 = Base::Sub<3>;

    // (3) Error: 'Class' is incomplete here
    using S4 = Class::Sub<4>

    // (4) Works, but complicated
    using S1 = typename Class::template Sub<1>;
};

using Class0 = Class<0>;
int main() { }

注意事項:

  • 有沒有一種方法可以引用Sub 不必重復Base的專門化? 即,考慮具有大量/復雜模板參數的Base 基本上這就是為什么選項#3不起作用以及為什么我在選項#4中選擇Class作為資格的原因。

如果需要模板 Sub ,則可以使用選項5,即別名模板:

template<int I>
using Sub = typename Base<C>::template Sub<I>;

現在,在非限定名稱查找期間,可以在Class內找到Sub ,並且知道這是一個模板。 當引用專門化時,它也將完全代表從基類成員模板獲得的相同類型。

現場觀看

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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