我有一个与此类似的功能:

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()方法是没有用的,因为它需要一些时间来执行。
在这种情况下,只要找到一个元素,我就可以返回。
有没有一种简单的方法可以重构此方法而不必重复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)

}

你觉得这个怎么样?任何其他想法都欢迎

最佳答案

您真正想要做的是创建一个新函数canFillSet()并调用它。

所有“修复” fillSet()方法的方法都将导致它执行从其名称和签名不明显的操作=>这些方法是通往灾难的道路,它们将在以后修改程序时导致错误。

关于c++ - 不需要完全计算时从某种方法提前返回,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/17835759/

10-10 16:09