在命名空间声明后声明使用语句

Dav*_*ave 1 c++ api api-design namespaces using-declaration

我正在编写一个实用程序库,它由几个"包"组成.每个包中的类都包含在各种名称空间中.我已经知道如何通过在类声明结束时自动声明使用语句来简化情况(见下文),这将避免程序员在cpp文件中执行此操作.

namespace Utility
{
    class String
    {
        // Class Implementation
    };
}

using Utility::String;
Run Code Online (Sandbox Code Playgroud)

我的理解是,如果用户包含头String.h并且String在Utility中,那么程序员将希望使用String.显然,如果有外部类链包括一堆污染命名空间的文件,那么这可能会很糟糕,所以我想到如何将它变成#define.

namespace Utility
{
    class String
    {
        // Class Implementation
    };
}

#ifdef AUTO_DECLARE_NAMESPACE
    using Utility::String;
#endif
Run Code Online (Sandbox Code Playgroud)

这样,想要这种扩展功能的程序员可以获得它.

这是一个好主意还是有什么我忽略的?

Jam*_*lis 6

如果您只是为命名空间中声明的每个名称添加using声明,那么使用命名空间是没有意义的.

让您的头文件的用户决定他们如何使用标头.如果有人想使用using声明,请让他直接在.cpp文件中执行; 这将使.cpp文件中的代码更加清晰,因为名称的来源很明显.