为什么C ++标准使正则表达式算法免费功能?

时间:2015-01-27 18:56:01

标签: c++ regex c++11 generic-programming

我想知道为什么C ++标准决定制作regex_ *函数(regex_match,regex_search,regex_replace)非成员非朋友。他们都需要访问basic_regex的内部以执行算法。为什么他们不让它们成为basic_regex的成员函数?在这种情况下,免费功能有什么好处?

1 个答案:

答案 0 :(得分:1)

由于regex_ *函数是非成员,非朋友,因此他们只能访问basic_regex的公共接口。如果他们只需要访问公共接口,那么成为自由函数的成员函数就没什么好处,因为成员和自由函数都可以访问公共接口。此外,通过自由函数,您可以删除将regex_ *函数与basic_regex类连接的依赖项。如果添加或更改或删除了regex_ *函数,那些不使用这些特定regex_ *函数的basic_regex用户不必重新编译或击打睫毛。这将有助于将来证明这些功能的客户以及basic_regex对未来标准中所设想的任何更改。

regex_ *函数只有在需要访问basic_regex接口的受保护或私有成员时才需要是成员函数或朋友函数。

如果不需要,为什么还要增加依赖?