为什么通用编程设计更喜欢免费功能而不是成员函数?

Vik*_*kas 4 c++ generics boost

我最近介绍了通用编程库的设计,如STL,boost :: graph,boost PropertyMaps http://www.boost.org/doc/libs/1_54_0/libs/property_map/doc/property_map.html

使用像get(PropertyMap,key)这样的自由函数而不是像PropertyMap.get(key)这样的成员函数的原理是什么?

我知道这些函数的最通用形式是在"boost"命名空间中定义的.假设我在命名空间"project"中定义了一个新的PropertyMap,定义它的相应"get"函数的最佳位置是什么?"提升"或"项目"

Mat*_* M. 6

有两个不同的原因:

  • 更好的封装:通过最小化有权访问类属性的函数数量,可以改善封装.

  • 可扩展性:在C++中,命名空间定义是打开的(您可以添加到它),同时关闭类定义; 因此,您可以添加自由函数,但不能添加成员函数.

虽然封装更多是品味问题,但可扩展性在通用编程中非常重要.你不想放弃第三方类型只是因为它缺少你需要的一种方法......当然,某些类型(例如内置类型或标准库类型)根本无法扩展.