読者です 読者をやめる 読者になる 読者になる

Boost.ScopeExitがC++11ラムダ対応した

C++

【ScopeExit】 C++0X support


Boostのtrunkに、Boost.ScopeExitのC++11 ラムダ対応の実装が入りました。
C++11のラムダ式が使える環境では、デフォルトキャプチャが使用できるようになり、BOOST_SCOPE_EXIT_ENDを書く必要がなくなります。

#include <iostream>
#include <boost/scope_exit.hpp>

int a = 0;
int b = 0;

// C++11 lambda style
void f()
{
    a = 1;

    BOOST_SCOPE_EXIT((&)) {
        a = 3;
    };

    a = 2;
}

// C++03 style
void g()
{
    b = 1;

    BOOST_SCOPE_EXIT((&b)) {
        b = 3;
    } BOOST_SCOPE_EXIT_END

    b = 2;
}

int main()
{
    f();
    std::cout << a << std::endl;

    g();
    std::cout << b << std::endl;
}
3
3

Boost 1.49.0くらいに入ると思われます。