令人困惑的typedef涉及类作用域

A confusing typedef involves class scope

本文关键字:作用域 typedef      更新时间:2023-10-16

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

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

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

实际代码中的AB类不是空的,但我认为这与这里无关。这是一个活生生的例子。

ns::B::*

是指向B的成员变量的指针。那么ns::A*就是它的类型。

所以整个声明意味着

指向ns::A*类型的B成员变量的指针

@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;
}