我有一个与此类似的功能:
void fillset(std::set<int>& myset)
{
while(...) {
object[i]->fillset(myset);
}
if(...)
otherfillset(myset)
}
现在我注意到这个函数经常是这样使用的:
bool isAllowed() {
std::set<int> myset;
fillset(myset);
return !myset.empty();
}
现在,在这种情况下调用整个 fillset() 方法是没有用的,因为它需要一些时间来执行。在这种情况下,我可以在找到一个元素后立即返回。有没有一种简单的方法来重构它而不必复制填充集的代码?我在想这样的事情:
template<bool return_as_soon_as_not_empty>
void fillset(std::set<int>& myset)
{
while(...) {
object[i]->fillset(myset);
if( return_as_soon_as_not_empty && !myset.empty()) {
return;
}
}
if(...)
otherfillset(myset)
}
你觉得这个怎么样?欢迎任何其他想法