A confusing typedef involves class scope
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.
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*
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;
}