为什么这个参数在regex_match的原型中排序?

时间:2011-06-29 10:44:33

标签: c++ regex prototype c++11

以下是std::tr1::regex_match

6 prototypes的简化
regex_match(iterator1, iterator2, match_results&, regex&, flags = some_default);
regex_match(iterator1, iterator2,                 regex&, flags = some_default);

regex_match(Elem*,                match_results&, regex&, flags = some_default);
regex_match(Elem*,                                regex&, flags = some_default);

regex_match(string,               match_results&, regex&, flags = some_default);
regex_match(string,                               regex&, flags = some_default);

我想知道为什么原型是这样设计的:

  • 似乎match_resultsflags都是可选的,但您应该能够提供其中之一。为什么不将match_results &参数放在flags参数旁边?
  • regex &参数作为主要参数似乎更直观。

有人可以解释这些原型背后的基本原理吗?

谢谢。

2 个答案:

答案 0 :(得分:2)

我唯一能想到的是与算法库的某种风格一致性。如果你认为match_results是某种输出迭代器,那么它看起来像copy等,前面有一个迭代器范围,之后是输出迭代器,之后是谓词。不存储match_results的选项将这些变为谓词,如any_of等。

为了图书馆的一致性,有一些事情要说。

这是我的猜测。

答案 1 :(得分:0)

我想我同意你的观点。你的建议会更有意义。

至于“为什么选择这种方式”,对此没有客观的答案;我当然没有明显的技术理由。

我把它归结为委员会设计。