令人困惑的typedef涉及类范围

时间:2015-11-17 18:37:20

标签: c++ typedef pointer-to-member

我正在阅读C ++项目的代码,它包含以下形式的代码:

namespace ns {
    class A {};
    class B {};
}

struct C {
    typedef ns::A* ns::B::* type;
};

有人可以解释typedef行的含义吗? type似乎是ns::B成员指向ns::A的某种指针,但我不确定。

实际代码中的

AB不是空的,但我认为它与此无关。这是一个live example

2 个答案:

答案 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;
}