我理解将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
在实际代码中,命名空间名称更长且烦人,我无法更改。
谁能解释为什么这是不合法的,或者(更好)是否有解决方法?