[英]Why does boost recommend using core functions over member functions?
在boost.geometry的文档中,它说明了
注意:更喜欢使用x = bg :: get :<0>(point1);
(而不是x = point1.get <0>();)
我在boost docs的其他地方看过这个。 我的问题是为什么? 这是最好的做法,表演还是一些怪癖? 这是一般规则还是特定于此库?
它本身并不是提升,而是现代C ++ API设计。
通过不要求成员函数,您可以调整自己的类甚至第三方库类型以使用您选择的boost Api。 (这样您就可以将类型从第三方库序列化为Boost Serialization存档)。
此外,通过使函数自由函数,可以改善依赖关系的解耦。 例如: fusion/tuple.hpp
不需要依赖任何与IO相关的东西,因为流操作是自由函数,因此可以在单独的头中声明(和定义): fusion/tuple_io.hpp
。
它还有助于封装,因为默认情况下,自由函数不是宿主类的friend
(因此无法访问私有成员)。
免费功能可以基于ADL“做正确的事”:
using std::swap; swap(a, b); // will lookup `swap` in the namespaces that declare the parameter types
(其他几个名称空间也用于查找)
最后,自由函数可以一般地为一组类型提供服务,这些类型不需要与OO相关(与继承相关)。 通过这种方式,自由函数可以避免重复代码。
编辑解决为什么您应该更喜欢非成员语法的问题, 如果两者都存在 :
.template
消歧(正如@Simple所指出的那样) 再说一遍:这不是特定的提升。
std::swap()
作为自由函数 std::begin()
和std::end()
引入为自由函数 std::hash<>
, std::less<>
, std::greater<>
, std::equal_to<>
同样提供非侵入性的定制点 (当然不是函数 )
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.