offa / cpp-guards

C++ RAII template classes / scope guards.

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

CI GitHub release License C++

C++ RAII template classes.

Please visit scope-guard for a more advanced version.

Requirements

Testing

mkdir build && cd build
cmake ..
make
make unittest

It's also possible to use make test / ctest, this will execute the tests using ctest.

Examples

#include "guards/Guards.h"
#include <iostream>
#include <sys/socket.h>

void example()
{
    using namespace guards;
    auto guard = makeScopeGuard([]{ std::cout << "The End\n"; });

    // ...
    // 'The End' is printed on guard's destruction
}

void example2()
{
    using namespace guards;
    auto guard1 = makeTransactionGuard([]{ std::cout << "Guard #1\n"; });

    auto guard2 = makeTransactionGuard([]{ std::cout << "Guard #2\n"; });
    guard2.commit(); // Disarm

    // ...
    // Only 'Guard #1' is printed
}

void example3()
{
    int fd = socket(AF_INET, SOCK_STREAM, 0);
    // Ensure 'fd' is closed in any case
    auto guard = makeScopeGuard([&fd] { close(fd); });

    // ...

    /*
     * The socket is closed as `guard` is destructed,
     * eg. out-of-scope or by an exception.
     */
}

License

GNU General Public License (GPL)

This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.

This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
GNU General Public License for more details.

You should have received a copy of the GNU General Public License
along with this program.  If not, see <http://www.gnu.org/licenses/>.

About

C++ RAII template classes / scope guards.

License:GNU General Public License v3.0


Languages

Language:C++ 99.6%Language:CMake 0.3%Language:C 0.1%Language:Shell 0.0%