我有一个容器类(包含一个多索引容器),我有一个公共的“foreach”成员函数,因此用户可以传递一个仿函数来应用所有元素。
在实现时,我遇到了一个情况,即仿函数只应该应用于容器中某个范围的某些元素,所以我重载了foreach,以传递一些有效的范围。
现在,在某些情况下,值得在某个条件下停止,所以实际上,我让foreach根据函数的返回值停止。
我对系统如何运作感到满意,但我有一个问题:
在一个范围内如何调用“foreach”,并调用停止条件?
任何人都知道一个通用,清晰和简洁的名字?
答案 0 :(得分:6)
根据您的说明,我会选择apply_until()
。
答案 1 :(得分:2)
也许是until
或其他什么?
答案 2 :(得分:1)
我可能会将其称为foreach_until
或foreach_while
(尝试遵循基于_if
函数的约定,例如replace_if
和remove_if
,但这里的条件不是“if”每一个都是真的,它是“直到”结束条件成立的)。或者只是foreach
。 std::for_each
忽略了仿函数的返回值,但这并不一定意味着您的函数foreach
必须这样做。我认为回调函数的一个非常常见的习惯是返回值允许提前退出控制循环。
如果回调返回false值(继续)或true值(停止),则可以调用函数find_if
。这基本上就是它,它可以使用std::find_if
实现,即使调用者对迭代器引发结束条件不感兴趣。
答案 3 :(得分:1)
如果您可以提供返回感兴趣元素视图的子集函数,则可能不需要apply_until()。只是myContainer.subset(3, 17).foreach(myFunctor)
我认为这是一个更好的关注点分离。
答案 4 :(得分:0)
通用名称? ConditionalIterator? RangeIterator?或者因为它是一个函数,也许是IterateRange?
答案 5 :(得分:0)
find_if(...)
怎么样,如stl?