Чтобы получить доступ к typedefs (объявленным в A), изнутри B, мне нужно сделать «использование пространства имен A;»
Нет.
Однако, если есть typedef или какой-либо другой символ с тем же именем, что и ваш typedef, определенный в пространстве имен B
, то вам нужно написать это:
A::some_type a;
Давайте сделаем простой эксперимент, чтобы понять это.
Рассмотрим этот код: ( необходимо прочитать комментарии )
namespace A
{
typedef int some_type; //some_type is int
namespace B
{
typedef char* some_type; //here some_type is char*
struct X
{
some_type m; //what is the type of m? char* or int?
A::some_type n; //what is the type of n? char* or int?
};
void f(int) { cout << "f(int)" << endl; }
void f(char*) { cout << "f(char*)" << endl; }
}
}
int main() {
A::B::X x;
A::B::f(x.m);
A::B::f(x.n);
return 0;
}
Выход:
f(char*)
f(int)
Это доказывает, что тип из m
равен char*
, а тип из n
равен int
как ожидалось или предполагалось.
Онлайн демо: http://ideone.com/abXc8