实用函数应该是未命名命名空间中的函数,还是私有成员函数? [重复]

问题描述 投票:0回答:1

我的问题是关于使用未命名的命名空间来组织类中的代码。

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

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

这些方法哪种更好?

c++ namespaces coding-style member-functions unnamed-namespace
1个回答
1
投票

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

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

© www.soinside.com 2019 - 2024. All rights reserved.