我有一些变量和方法,需要从各处轻松访问,同时保持组织良好。我曾经将它们保存在由“category”组织的类中,并将对这些类的引用传递给需要它们的函数/方法(通过参数)。
然后我意识到这太乱了,太丑了,很难做出改变,所以我通过参数摆脱了引用并在全局范围内声明它们。
然后我意识到这些类中的大多数只有一个实例,并且所有方法和成员变量都是静态的,并且删除了每个类中唯一的实例。
然后我在互联网上阅读了一些东西并且意识到(是的,再一次)使用命名空间而不是类更好(我可以使用using namespace
,这非常方便)。现在它有点像这样:
// header
namespace Graphics
{
// some functions
void Initialize(HWND hWnd);
void CreateTextureRenderTarget(UINT Width, UINT Height, DXGI_FORMAT Format, ID3D11RenderTargetView** RenterTargetOutput, ID3D11ShaderResourceView** ShaderResourceOutput, bool GenerateMips = false);
// ...
extern CComPtr<IDXGIFactory> Factory;
extern CComPtr<IDXGIAdapter> Adapter;
extern CComPtr<IDXGIOutput> Output; // The output (display monitor)
extern CComPtr<IDXGISwapChain> SwapChain;
extern CComPtr<ID3D11Device> Device;
extern CComPtr<ID3D11DeviceContext> ImmediateContext;
// ...
}
// source
namespace Graphics
{
CComPtr<IDXGIFactory> Factory;
CComPtr<IDXGIAdapter> Adapter;
CComPtr<IDXGIOutput> Output;
CComPtr<IDXGISwapChain> SwapChain;
CComPtr<ID3D11Device> Device;
CComPtr<ID3D11DeviceContext> ImmediateContext;
// ...
void Initialize(HWND hWnd)
{
// ...
现在我想知道:像我这样使用命名空间的优点和缺点是什么?
答案 0 :(得分:0)
假设您有两个名称空间:
namespace one {
print(){ cout<<"one"<<endl;
}
namespace two {
print(){ cout<<"two"<<endl;
}
在主文件中:
using namespace one;
using namespace two;
int main(){
print(); // conflict arises because it doesn't know which print to call
}
输出:
Error: Call of overloaded print() is ambiguous.
要解决此问题,我们使用范围解析运算符(::)。
在主文件中:
int main(){
one::print();
two::print();
}
输出:
one
two