令人困惑的typedef涉及类范围

Tie*_*ien 56 c++ typedef pointer-to-member

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

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

struct C {
    typedef ns::A* ns::B::* type;
};
Run Code Online (Sandbox Code Playgroud)

有人可以解释这条typedef线的含义吗?type似乎是某种指针的成员的ns::B指向ns::A,但我不知道.

AB实际代码不是空的,但我认为这与此无关.这是一个实例.

vso*_*tco 39

ns::B::*
Run Code Online (Sandbox Code Playgroud)

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

所以整个声明意味着

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


R S*_*ahu 27

@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;
}
Run Code Online (Sandbox Code Playgroud)

  • @JAB这是一个很好的思考方式. (2认同)