Rozumiem, jakie problemy można napotkać po umieszczeniu deklaracji using
w pliku nagłówkowym, więc nie chcę tego robić. Zamiast tego próbowałem umieścić using
(lub namespace foo =
) w deklaracji klasy, aby ograniczyć powtarzalne pisanie w pliku nagłówkowym. Niestety otrzymuję błędy kompilatora. Wydaje się, że byłoby to przydatną funkcją.Dlaczego nie mogę umieścić deklaracji "using" w deklaracji klasy?
#ifndef FOO_H
#define FOO_H
// This include defines types in namespace gee::whiz::abc::def,
// such as the class Hello.
#include "file_from_another_namespace.h"
// using namespace gee::whiz::abc::def; // BAD!
namespace x {
namespace y {
namespace z {
struct Foo {
using namespace gee::whiz::abc::def; // Illegal.
namespace other = gee::whiz::abc::def; // Illegal.
// Foo(gee::whiz::abc::def::Hello &hello); // annoyingly long-winded
Foo(other::Hello &hello); // better
//...
};
} } } // end x::y::z namespace
#endif // FOO_H
W kodzie rzeczywistym nazwy przestrzeni nazw są znacznie dłuższe i denerwujące i nie jest to coś, co mogę zmienić.
Czy ktoś może wyjaśnić, dlaczego nie jest to zgodne z prawem lub (lepiej), jeśli istnieje obejście problemu?
To nadal będzie zanieczyszczać przestrzeń nazw, której stara się uniknąć. – Trent
Nie, jeśli jest używany w deklaracji klasy. –
Tak, to działa! A jeśli zrobię to jako prywatny typ, to inny kod nie może go użyć przypadkowo. – Dan