簡體   English   中英

獲取不依賴於模板化類的模板的 typedef

[英]Getting a typedef that does not depend on templates of a templated class

如果這是重復的,請提前道歉 - 我無法在這里找到我的答案。 我有以下課程:

template <typename T>
class A {
public:
    using X = double;

private:
    T x;
};

現在,我想獲得A<T>::X 不聲明 T 可以做到嗎?

我嘗試了一些方法:

template <typename T>
using B = A<T>::X;

B e = 0;

但是,如果不指定模板,這顯然不起作用。

首先,定義B別名模板需要關鍵字typename

template <typename T>
using B = typename A<T>::X;

原因是X是一個依賴名稱:模板內的名稱,帶有尚未確定的參數T


由於B是采用類型模板參數(即: T )的別名模板,因此必須提供該參數以確定X ,例如,如果Tint

B<int> e = 0;

但是,請注意,對於每個T ,這可能無效或按您的預期工作,因為A類模板可能已經專門具有名稱X代表完全不同的東西。 例如, X可以表示double以外的類型:

template<>
class A<float> { 
public:
    using X = int; // not double!
};

名稱X可以表示數據成員而不是類型:

template<>
class A<char> { 
public:
    static constexpr int X = 1; // not a type!
};

或者它可能根本不存在:

template<> class A { /* not name X */};

暫無
暫無

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

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