实用函数的匿名命名空间
Anonymous namespace for utility function
我的问题是关于使用匿名命名空间在一个类中组织我的代码。
早先,每当我需要一些执行内部计算的实用方法时,我就在类中添加一个私有方法,进行计算并使用结果。
现在,我没有向类添加私有方法,而是在类源中作为匿名名称空间内的函数实现相同的计算,传递所需的数据并获取结果。在我读到即使是类的私有方法也是其接口的一部分,而非成员函数可以改善类的封装之后,我开始了这种实践。
哪一种方法更好?
将在概念上可能是面向客户端头文件中的私有成员函数移动到关联实现文件中的匿名名称空间中的非成员函数有很多值得讨论的地方,主要是因为不出现在头文件中,客户端代码在添加/更改/删除时无需重新编译,而且还因为改进了类封装。也就是说,头文件中的任何内联函数都不能看到/调用匿名命名空间内容,并且没有通用封装来防止实现文件翻译单元中的其他代码耦合到它。因此,以实现文件中其余代码的潜在成本为代价,对类进行了更好的封装,但这很少是一个主要的实际问题,因为那些接受类类型对象的指针或引用的非成员函数不太容易出于不相关的目的而意外重用,并且与任意的"客户端代码"相比,至少翻译单元提供了相对较小的作用域。
也就是说,上面的权衡并不是Scott Meyer链接文章的主要内容——它关注的是在头文件中声明的非成员非友函数与公共成员函数之间的选择。但是,正如您明显注意到的那样,有几个概念适用于
相关文章:
- 在命名空间中定义函数还是限定函数
- CUDA内核和数学函数的显式命名空间
- 在命名空间中使用全局命名空间中的函数
- 是否可以将函数导入命名空间,但不能导出它?
- 使用另一个命名空间中的函数C++
- Visual Studio 无法解决类和命名空间中重载的明确函数
- 命名空间更改函数定义
- C++命名空间中调用 void 函数的错误
- C++ 17 个友元函数声明和内联命名空间
- MFC 函数来自 :: 命名空间?
- 使用类指针重载C++命名空间函数模板专用化替代方法?
- 在头文件中添加命名空间函数
- 命名空间函数的多重定义
- 在多个 cpp 文件中重用未命名的命名空间函数
- 如何正确声明命名空间函数
- 使用 libclang 解析命名空间函数
- C++命名空间函数
- 内联命名空间函数时出错
- 递归std::functional与递归匿名命名空间函数.使用哪一个
- 如何在命名空间函数中使用pragma weak