From d98586504882e28cd587779573fccf3317726b65 Mon Sep 17 00:00:00 2001 From: Frank Mayer Date: Fri, 1 Nov 2024 22:21:50 +0100 Subject: [PATCH] defer :) --- src/defer.h | 21 +++++++++++++++++++++ src/main.cpp | 11 ++++++++++- 2 files changed, 31 insertions(+), 1 deletion(-) create mode 100644 src/defer.h diff --git a/src/defer.h b/src/defer.h new file mode 100644 index 0000000..b7dc7af --- /dev/null +++ b/src/defer.h @@ -0,0 +1,21 @@ +#ifndef DEFER_H +#define DEFER_H + +#include +#include + +class Defer { +public: + Defer(std::function func) : func_(func) {} + ~Defer() { func_(); } + +private: + std::function func_; +}; + +#define CONCAT_IMPL(a, b) a##b +#define CONCAT(a, b) CONCAT_IMPL(a, b) + +#define DEFER(code) Defer CONCAT(defer__, __LINE__)([&]() { code; }); + +#endif // DEFER_H diff --git a/src/main.cpp b/src/main.cpp index 0ab7f9b..2e0c183 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -1,6 +1,15 @@ +#include "defer.h" #include +struct Meep { + std::string foo = "Meep!"; +}; + int main() { - std::cout << "Hello, World!" << std::endl; + Meep *meep = new Meep(); + DEFER(delete meep); + + DEFER(std::cout << "Goodbye, " << meep->foo << std::endl); + std::cout << "Hello, " << meep->foo << std::endl; return 0; }