实用函数的匿名命名空间

Anonymous namespace for utility function

本文关键字:命名空间 函数      更新时间:2023-10-16

我的问题是关于使用匿名命名空间在一个类中组织我的代码。

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

现在,我没有向类添加私有方法,而是在类源中作为匿名名称空间内的函数实现相同的计算,传递所需的数据并获取结果。在我读到即使是类的私有方法也是其接口的一部分,而非成员函数可以改善类的封装之后,我开始了这种实践。

哪一种方法更好?

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

也就是说,上面的权衡并不是Scott Meyer链接文章的主要内容——它关注的是在头文件中声明的非成员非友函数与公共成员函数之间的选择。但是,正如您明显注意到的那样,有几个概念适用于