我无法编译以下代码:
template<typename T>
class A {
public:
T x;
typedef T type;
};
int main()
{
A<int> a;
using T = a.type;
T t;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
它报告了一个错误:
error: unknown type name 'a'
using T = a.type;
Run Code Online (Sandbox Code Playgroud)
这是否意味着该对象a没有type其成员之一?并且类型不能是对象的成员,对吗?
type不是对象实例的数据成员a。所以不,您无法在 的实例上type使用.或运算符进行访问。->A
type是类的嵌套类型A。您必须使用::运算符来访问它,例如:
using T = A<int>::type;
或者
using T = decltype(a)::type;