获得不取决于模板类的模板的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;
但显然没有指定模板。
fir,定义B
别名模板的关键字typename
是需要的。:
template <typename T>
using B = typename A<T>::X;
原因是 X
是依赖的名称:一个模板中的名称,带有尚未确定的参数 T
。
由于 B
是一个别名模板服用类型模板参数(即 T
(,因此必须提供该参数才能确定X
,例如T
是int
:
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 */};
相关文章:
- C++:TypeDef使用元组
- 重载运算符new[]的行为取决于析构函数
- 有没有一种方法可以通过"typedef"为重新定义的基本类型定义特征和强制转换运算符
- 为什么在使用typedef时类推导指南会失败
- 尝试根据类中 typedef 的存在来专门化模板函数
- 如何重新定义MPI_FLOAT,MPI_DOUBLE以 typedef 的方式
- typedef 枚举和枚举类有什么区别?
- 在类模板中使用 typedef 时出错
- 模板类中的 typedef 语句
- 在 typedef 内部使用 const 关键字和在 typedef 外部使用 const 关键字之间有区别吗?
- 如何将成员函数作为回调参数传递给需要"typedef-ed"自由函数指针的函数?
- 新的放置取决于 iostream
- Writefile() 无法写入数据,具体取决于数据的长度
- ASIO signal_set多个 IO 线程不可靠,具体取决于代码顺序?
- SFINAE是否取决于类型推断?
- 将强制转换简化为取决于参数的类型
- 修复"-Wunused-parameter"取决于预处理器条件的警告
- 内存中类位置的成员是否取决于类成员在类定义中的位置?
- C++中"typedef"、"using"、"namespace"和"using namespace"有什么区别?
- 获得不取决于模板类的模板的Typedef