Ответ 1
ns::B::*
является переменной-указателем-членом-членом B
. Тогда ns::A*
- его тип.
Таким образом, вся декларация означает
указатель-член-переменная B
типа ns::A*
Я читаю код проекта С++ и содержит код следующего вида:
namespace ns {
class A {};
class B {};
}
struct C {
typedef ns::A* ns::B::* type;
};
Может кто-нибудь объяснить смысл строки typedef
? type
кажется своего рода указателем на член ns::B
, который указывает на ns::A
, но я не уверен.
Класс A
и B
в реальном коде не пуст, но я думаю, что это не актуально. И вот живой пример.
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;
}