2011-06-29 32 views
4

這裏是6 prototypesstd::tr1::regex_match爲什麼這個參數在regex_match的原型中排序?

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 &說法似乎爲龍頭的說法更直觀。

有人能解釋這些原型背後的原理是什麼?

謝謝。

+0

'match_results&'是一個參考,那是如何選擇的? – Xeo

+0

@Xeo:因爲沒有它就有相同的過載? – Puppy

+0

@DeadMG:忽略我最後的評論,然後,我似乎太困了。 – Xeo

回答

2

我能想到的唯一的事情就是某種與算法庫風格的一致性。如果你認爲match_results是某種輸出迭代器,那麼它看起來像複製等,前面有一個迭代器範圍,之後是一個輸出迭代器,之後是謂詞。不存儲的match_results的選項打開這些到像any_of謂詞等

也有一些是在圖書館一致性可說的。

這是我的猜測。

+0

我喜歡這個假設,所以+1。 – Benoit

0

我想我同意你的看法。你的建議會更有意義。

至於「爲什麼被選擇是這樣」沒有客觀問題的答案;我肯定沒有明顯的技術原因。

我把它歸結爲設計由委員會。

+0

我不確定我可以接受這個答案,因爲我確信這些原型必須有一個很好的理由,我的目的是要知道爲什麼。如果我沒有其他答案,我會接受它! – Benoit

+0

我不知道類型是什麼,但是'flags'和'match_results'可能不明確嗎?這是我可以認爲這可能是故意選擇的唯一原因。如果你想從圖書館的設計者那裏得到一些親自見證的話,這可能是錯誤的地方。 –

相關問題