代码之家  ›  专栏  ›  技术社区  ›  Arun

实用程序函数的匿名命名空间[重复]

  •  4
  • Arun  · 技术社区  · 10 年前

    我的问题是如何使用匿名命名空间来组织类中的代码。

    早些时候,每当我需要执行一些内部计算的实用方法时,我都会在类中添加一个私有方法,进行计算并使用结果。

    现在,我没有向类中添加私有方法,而是在类源中实现与匿名命名空间中的函数相同的计算,传递所需的数据并获取结果。 我在阅读后开始了这个练习 here 即使是类的私有方法也是其接口的一部分,非成员函数也改进了类的封装。

    以下哪种方法更好?

    1 回复  |  直到 10 年前
        1
  •  1
  •   Tony Delroy    10 年前

    将面向客户端的头中概念上可能是私有成员函数的函数移动到相关实现文件中的匿名命名空间中的非成员函数有很多值得说的地方,这主要是因为在添加/更改/删除客户端代码时,客户端代码不必重新编译,而且还因为改进了类封装。也就是说,头中的任何内联函数都无法查看/调用匿名命名空间内容,并且没有通用的封装阻止实现文件的翻译单元中的其他代码与之耦合。因此,该类以潜在成本更好地封装到实现文件中的其余代码,但这很少是一个主要的实际问题,因为那些非成员函数获取指向类类型对象的指针或引用,不太可能出于不相关的目的而意外重用,而且与任意的“客户端代码”相比,至少翻译单元提供的范围相对较小。

    也就是说,上面的权衡并不是Scott Meyer的链接文章的主要内容,它侧重于选择头中声明的非成员非朋友函数与公共成员函数。但是,正如您已经注意到的,有几个概念适用。