A confusing typedef involves class scope

时间秒杀一切 提交于 2019-12-20 09:09:45

问题


I'm reading code of a C++ project and it contains some code of the following form:

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

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

Can someone explain the meaning of the typedef line? type seems to be some kind of pointer to member of ns::B which points to ns::A, but I'm not sure.

Class A and B in the real code are not empty, but I think it's not relevant here. And here is a live example.


回答1:


ns::B::*

is a pointer-to-member-variable of B. Then ns::A* is its type.

So the whole declaration means

pointer-to-member-variable of B of type ns::A*




回答2:


The answer by @vsoftco already answers the core of the question. This answer shows how one might use such a 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;
}


来源:https://stackoverflow.com/questions/33764533/a-confusing-typedef-involves-class-scope

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!