developer tip

혼란스러운 typedef에는 클래스 범위가 포함됩니다.

copycodes 2020. 12. 31. 22:14
반응형

혼란스러운 typedef에는 클래스 범위가 포함됩니다.


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*유형입니다.

따라서 전체 선언은

B유형 의 멤버에 대한 포인터 변수ns::A*


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

참조 URL : https://stackoverflow.com/questions/33764533/a-confusing-typedef-involves-class-scope

반응형