#include <boost/function.hpp>
#include <boost/lambda/lambda.hpp>
clsss DefineCleanup
{
public:
DefineCleanup(const boost::function<void()>& finalizer)
: finalizer_(finalizer) { assert(finalizer_); }
~DefineCleanup() { finalizer_(); }
private:
const boost::function<void()> finalizer_;
};
void test()
{
static bool someone_is_inside = false;
if(someone_is_inside){ return; }
someone_is_inside = true;
DefineCleanup set_guard_false_later(boost::lambda::var(someone_is_inside) = false);
// ....
}
これは再帰呼び出しを防ぐ例。
スレッドセーフじゃないとか問題はいろいろあるだろうけれど、そこは主題じゃないから無視。
0 件のコメント:
コメントを投稿