在命名空间中组织变量和方法的优缺点

时间:2015-12-27 01:25:54

标签: c++ namespaces

我有一些变量和方法,需要从各处轻松访问,同时保持组织良好。我曾经将它们保存在由“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)
    {
    // ...

现在我想知道:像我这样使用命名空间的优点和缺点是什么?

1 个答案:

答案 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