Я понимаю проблемы, в которые Вы можете войти, когда Вы помещаете a using
декларация в заголовочном файле, таким образом, я не хочу делать это. Вместо этого я пытался поместить using
(или a namespace foo =
) в рамках декларации класса, чтобы сократить повторяющуюся печать в заголовочном файле. К сожалению, я получаю ошибки компилятора. Кажется, что это была бы полезная особенность.
#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
В реальном кодексе имена пространства имен намного длиннее и раздражающие, и это не что-то, что я могу изменить.
Кто-либо может объяснить, почему это не законно, или (лучше) если есть работа?
Не могли бы вы сделать Typedef Gee :: Whiz :: ABC :: Def :: Здравствуйте Здравствуйте
?
На самом деле не совсем ужасная идея. Это составляет как минимум так же намного смысловым, как то, как он работает сейчас (что предоставлено, не так много). Я думаю, что основная проблема заключается в том, что классы не являются единицей компиляции и связывания, но «единицы перевода». Но делать это класс по классу гораздо чище, имея классы быть модулями, как в Java или C # или других языках, которые имеют больше смысла.