Я пишу библиотеку с содержимым:C++: переопределять ли текущее пространство имен других пространств имен
namespace david {
typedef enum {
BAR
} CommonEnum;
class Foo {
void fooBar() {
std::cout << BAR << std::endl;
}
}
}
и давайте предположим, что пользователь записывает файл
typedef enum {
BAR = 1
} CommonEnum;
#include <david.h>
Foo myFoo();
myFoo.fooBar();
Что будет напечатано? Если будет напечатано 0
, то надежный? Я знаю, что мог бы просто префикс моего использования BAR
в david::Foo
так, чтобы он читал david::BAR
, и это точно ответит на вопрос (это то, что я сейчас делаю), но оно становится довольно многословным, и я пытаюсь придерживаться 80 -character limit, что означает, что мой код становится все труднее читать.
* «Что будет напечатано?» * - Вопрос назад: что * * был напечатан, когда вы пробовали это? Это единственный вопрос, или вы ищете цитату из стандарта, которая устраняет любые сомнения в том, что то, что вы стали свидетелями, является окончательным? – WhozCraig
Сначала он будет жаловаться на недостающую точку с запятой в определении Foo, тогда он скажет вам, что «Foo' не был объявлен в этой области», а затем, когда вы исправляете это, «запрос для члена' fooBar' в ' myFoo', который является неклассовым типом 'david :: Foo()' ", и, наконец, он будет жаловаться, что' fooBar' является закрытым. –