我有一个与此类似的功能:
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/