我正在阅读C ++项目的代码,它包含以下形式的代码:
namespace ns {
class A {};
class B {};
}
struct C {
typedef ns::A* ns::B::* type;
};
有人可以解释typedef
行的含义吗? type
似乎是ns::B
成员指向ns::A
的某种指针,但我不确定。
类A
和B
不是空的,但我认为它与此无关。这是一个live example。
答案 0 :(得分:41)
ns::B::*
是B
的指向成员变量的指针。然后ns::A*
就是它的类型。
所以整个声明意味着
B
类型的ns::A*
指向成员变量
答案 1 :(得分:28)
The answer by @vsoftco已经回答了问题的核心。这个答案显示了如何使用这样的typedef
。
#include <iostream>
#include <cstddef>
namespace ns {
struct A {};
struct B
{
A* a1;
A* a2;
};
}
struct C {
typedef ns::A* ns::B::*type;
};
int main()
{
C::type ptr1 = &ns::B::a1;
C::type ptr2 = &ns::B::a2;
ns::B b1;
b1.*ptr1 = new ns::A; // Samething as b1.a1 = new ns::A;
return 0;
}