2009年1月28日水曜日

boost::lambdaで引数なしのラムダ関数を作る

#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 件のコメント:

コメントを投稿