我明白当你在一个头文件中放入一个using
声明时可能会遇到的麻烦,所以我不想那样做。相反,我试图将using
(或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
在实际的代码,命名空间名称是更长的时间,恼人的,它不是东西,我可以改变。
任何人都可以解释为什么这是不合法的,或(更好),如果有一个解决方法吗?
这仍然会污染他正试图避免的命名空间。 – Trent 2010-01-25 19:22:37
如果在类声明中使用它,则不适用。 – 2010-01-25 19:25:43
是的,工作!如果我使它成为一个私人的typedef,那么其他代码不会意外地使用它。 – Dan 2010-01-25 19:32:19