[英]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.