Почему я не могу поместить декларацию «использования» в декларации класса?

Я понимаю проблемы, в которые Вы можете войти, когда Вы помещаете 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

В реальном кодексе имена пространства имен намного длиннее и раздражающие, и это не что-то, что я могу изменить.

Кто-либо может объяснить, почему это не законно, или (лучше) если есть работа?

18
задан Dan 25 January 2010 в 19:08
поделиться

2 ответа

Не могли бы вы сделать Typedef Gee :: Whiz :: ABC :: Def :: Здравствуйте Здравствуйте ?

24
ответ дан 30 November 2019 в 08:10
поделиться

На самом деле не совсем ужасная идея. Это составляет как минимум так же намного смысловым, как то, как он работает сейчас (что предоставлено, не так много). Я думаю, что основная проблема заключается в том, что классы не являются единицей компиляции и связывания, но «единицы перевода». Но делать это класс по классу гораздо чище, имея классы быть модулями, как в Java или C # или других языках, которые имеют больше смысла.

4
ответ дан 30 November 2019 в 08:10
поделиться
Другие вопросы по тегам:

Похожие вопросы: