获得不取决于模板类的模板的Typedef

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

本文关键字:Typedef 取决于      更新时间:2023-10-16

如果这是重复的话,请提前道歉 - 我在这里找不到答案。我有以下课程:

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;

但显然没有指定模板。

fir,定义B 别名模板的关键字typename是需要的。:

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

原因是 X依赖的名称:一个模板中的名称,带有尚未确定的参数 T


由于 B是一个别名模板服用类型模板参数(即 T(,因此必须提供该参数才能确定X,例如Tint

B<int> e = 0;

但是,请注意,这可能是无效的,或者是您预期的每个T,因为A类模板可能是 specialized 具有X代表完全不同的东西的名称。例如,X可以代表double以外的其他类型:

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

名称X可以代表A 数据成员而不是类型:

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

或根本不存在:

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