[英]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
,例如,如果T
是int
:
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.