首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >标题中名称空间的别名?

标题中名称空间的别名?
EN

Software Engineering用户
提问于 2022-03-30 18:50:53
回答 1查看 1.1K关注 0票数 0

每次我写标题时,我都会做这样的事情:

代码语言:javascript
复制
#ifndef D723E2D5_1943_4166_87CC_73F5C9C47544
#define D723E2D5_1943_4166_87CC_73F5C9C47544
#include "RandomIntegers.hpp"
...
#include "IRenderer.hpp"

namespace Pathfinding::Core { class ApplicationBuilder; }
namespace Pathfinding::Datastructures { struct Node; }

namespace Pathfinding::Core
{
    class Application final : public Pathfinding::Abstract::IApplication
    {
        friend Pathfinding::Core::ApplicationBuilder;
    private:
        using PAIMenu = Pathfinding::Abstract::IMenu;
        using PAIEventManager = Pathfinding::Abstract::IEventManager;
        using PAAIncrementalInformedAlgorithm = Pathfinding::Abstract::AIncrementalInformedAlgorithm;
        using PAIGraphOperations = Pathfinding::Abstract::IGraphOperations;
        using PCApplicationState = Pathfinding::Core::ApplicationState;
        using PAALatGraphWr = Pathfinding::Abstract::ALatGraphWr;
        using PAIAStar = Pathfinding::Abstract::IAStar;
        using PDPathfinderCachee = Pathfinding::Datastructures::PathfinderCache;
        using PEMouseData = Pathfinding::Events::MouseData;
        using PEBindingsContainer = Pathfinding::Events::BindingsContainer;
        using PRDrawablePath = Pathfinding::Rendering::DrawablePath;
        using PDNode = Pathfinding::Datastructures::Node;
        using PADSFMazeGenerator = Pathfinding::Algorithms::DFSMazeGenerator;
        using PRNodeStateColors = Pathfinding::Rendering::NodeStateColors;
        using PAIFontLoader = Pathfinding::Abstract::IFontLoader;
        using PRGradientChanger = Pathfinding::Rendering::GradientChanger;
        using PAIRenderer = Pathfinding::Abstract::IRenderer;

    public:
     ...
    private:
        std::unique_ptr<PAIMenu> menuUPtr = nullptr;
        ...
        PEBindingsContainer bindings;
    };
}

#endif /* D723E2D5_1943_4166_87CC_73F5C9C47544 */

但我不确定using的东西,有没有更好的方法,还是这是可以接受的?据我所知,它肯定比使用Foo::Bar::Class在名称空间范围内的使用更好,那么还有哪些其他选择呢?

PS:我发现了一个类似的问题,但它有八年的历史,有些也许有新的东西。

在C++中包含名称空间以避免更多类型的良好实践是什么?

EN

回答 1

Software Engineering用户

回答已采纳

发布于 2022-03-30 19:43:30

using关键字有不同的角色。

类型别名命名空间别名 using NewName = OldNameusing Qualified::Namenamespace NewName = OldName只是用于类型胡枝子或#define宏的更好的语法,是完全可以接受的。它没有实质性的负面影响。如果它增加了代码的可读性,特别是当它帮助您避免深度嵌套的限定标识符Foo::Bar::Baz时,请使用它。

这与using namespace Foo使用指令完全不同。这会将名称空间中的每个名称引入当前范围。有时,这是适当的,特别是为了方便或由于有关参数依赖的查找规则,但至少在头,这是一个非常糟糕的做法。这就是你的问题所在。头文件中的using namespaceC++核心指南规则SF.7禁止,但在本地作用域中被接受。

就我个人而言,我不认为你的别名那么好,因为它们有一个不必要的前缀。例如,

代码语言:javascript
复制
using PAIMenu = Pathfinding::Abstract::IMenu;

在名称中保留不必要的名称空间缩写,这也掩盖了名称中的I接口标记。相反,我会考虑:

  • 只是别名名称空间PA =路径查找::抽象;.PA::IMenu
  • 将接口标记放在名称空间缩写之前,使用IPAMenu =Pathfinding::抽象::IMenu;
  • 完全取消名称空间(我喜欢的解决方案)使用路径查找::抽象::IMenu;

首先,也可能没有必要使用这样的别名。如果名称只使用一两次,那么每次只拼写出完全限定的名称可能是合适的。然而,精心选择的缩写也有助于提高复杂类型的可读性,特别是在模板或函数签名的上下文中。

票数 1
EN
页面原文内容由Software Engineering提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://softwareengineering.stackexchange.com/questions/437730

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档