你无法这样做。标准提供了一些不太好的替代方案:
// The stuff you want to use.
namespace foo { namespace bar {
class Frob {};
} }
现在,从最少污染到最多污染的顺序排列。
typedef
使得你可以在类定义的
private
部分中编写该别名:
class Schwarzschild {
typedef foo::bar::Frob FbFrob;
public: Schwarzschild () : a(FbFrob()), b(FbFrob()) {}
private: FbFrob a,b,c;
};
但您也可以全局使用它,但有机会重新命名:
class Schwarzschild {
public: Schwarzschild ();
private: foo::bar::Frob a,b,c;
};
typedef foo::bar::Frob FbFrob;
Scharzschild::Scharzschild() : a(FbFrob()) {}
您还可以为命名空间添加别名:
namespace fb = foo::bar;
class Planck {
public: Planck () : a(fb::Frob()), b(fb::Frob()) {}
private: fb::Frob a,b,c;
};
您也可以从其他命名空间中挑选符号,但缺点是您的Frob
可能会与翻译单元中的另一个Frob
冲突:
using foo::bar::Frob;
class Mach {
public: Mach () : a(Frob()), b(Frob()) {}
private: Frob a,b,c;
};
为了完整起见,最污染的解决方案是
使用命名空间
。
using namespace foo::bar;
class Newton {
public: Newton () : a(Frob()), b(Frob()) {}
private: Frob a,b,c;
};
注意,III、IV和V也可以限制在你的cxx文件中,就像在Schwarzschild示例中一样。
{}
之间的部分)。在文件的其他部分“污染”使用有什么不好?这是您的.cxx
文件,而不是头文件,所以应该没问题。另一个选项是执行using nsConstants::ONE;
,但您想要的是不可能的。 - PlasmaHH