我努力想办法避免多个return语句,使资源,这种清理没有得到复制,使我找到了以下几种方式:方法避免多次return语句
使用宏,执行如果错误不正确,清理。
#define EXE(x) if (OK != (err = x)) goto cleanup; ErrorCode func() { ErrorCode err = OK; EXE (fn1()); EXE (fn2()); cleanup: // do cleanup of resources return err; }
使用do ...而()休息的时候发生错误
ErrorCode func() { ErrorCode err = OK; do { err = fn1(); if (err != OK) break; err = fn2(); if (err != OK) break; } while (false); // do cleanup of resources return err; }
两种方式允许资源的清理工作在一个地方(立即返回语句以上),提高了可读性。有没有其他方法可以避免多重回报?
这看起来更像是C而不是C++。通常析构函数被用于“清理干净”,所以具有多个回报真的不是问题。 –
确切地说,在C++中,“清理”部分通常会消失。无论如何,你有一些宏观方法 - 它基本上是Haskell的符号。也就是说,我不推荐使用C++中的宏。 – chris
函数的向量,并在循环中执行它们。 –