C++命名空间做为单一对象[已关闭]

qyuhtwio  于 2022-11-20  发布在  其他
关注(0)|答案(1)|浏览(126)

已关闭。此问题为opinion-based。当前不接受答案。
**想要改进此问题吗?**请更新问题,以便editing this post可以用事实与引用来回答.

5天前关闭。
Improve this question
我正在阅读下面的文章:
https://luckyresistor.me/2019/07/09/class-or-module-for-singletons/
其中讨论了在C++中使用名称空间实现单例与用“传统”方式实现单例的利弊。在名称空间的“缺点”列表中,他说“全局变量在实现中是”隐藏“的。"。
我的问题是为什么这是一件坏事?特别是如果你在实现模块中使那些全局变量成为静态的(或者使用匿名命名空间...但是我更喜欢对这样的事情使用静态的)。

sqxo8psd

sqxo8psd1#

本文 的 作者 使用 这个 例子 来 激励 命名 空间 。此 声明 在 头 文件 中 。

class Foo {
public:
  static void methodA();
  static void methodB();
private:
  static uint32_t _value;
};

中 的 每 一 个
如果 更改 私有 成员 变量 而 不 更改 公共 接口 , 则 需要 重新 编译 头 文件 上 的 所有 依赖 项 。 如果 使用 命名 空间 , 则 头 文件 中 只 存在 接口 声明 。
更 重要 的 是 , 假设 您 希望 使用 自己 的 数据 类型 作为 实现 使用 的 变量 , 那么 您 需要 增加 头 文件 中 的 依赖 项 数量 , 或者 使用 前 向 声明 并 间接 保存 变量 ( 例如 , 通过 std::unique_ptr ) 。
假设 所有 方法 的 实现 都 在 源 文件 中 , 那么 在 头 文件 中 定义 变量 只有 一 个 缺点 。

相关问题