Best C++ macro for creating a new scope -


i have macro

#define scope_guard(guard, name,  ...) \    for(bool __once = true; __once; /* nothing */) \      for(guard name (__va_args__); __once; __once = false) 

using this:

scope_guard(std::unique_lock, lock, (some_mutex))   do_some(); 

or

scope_guard(std::unique_ptr<char>, buff, (new char[buffer_size])) {   *buff.get() = 0;   getsomedescription(buff.get(), buffer_size);   log(buff.get); } 

are there similar(better) implementation of macro, optimized multiple compilers correctly.

p.s. macro should one, without macro boost_scope_exit_end (can redefine if (...)).

edit simple scoupe in using codestyle huge.

{    std::unique_lock lock (some_mutex);    do_some(); } 

but want using this

scope_guard(std::unique_lock, lock, (some_mutex)) do_some(); 

you can awful lot c++ templates , lambda expressions. might worthwhile explore using them. example, instead of using scope_guard macro, this:

template <typename g, typename f, typename... a> inline auto scope_guard(g&&, f&& f, a&&... args) -> decltype(std::forward<f>(f)(std::forward<a>(args)...)) {     return std::forward<f>(f)(std::forward<a>(args)...); }      scope_guard(std::unique_lock<std::mutex>(m), do_something);     scope_guard(std::unique_lock<std::mutex>(m), [&]() {         do_something1();         do_something2();         do_something3();     }); 

if using straight macros, mine this:

#define unwrap(...)  __va_args__ #define scope_guard(x, y) { x; unwrap y; } while (0)      scope_guard(std::unique_lock<std::mutex> lock(m), (do_something()));     scope_guard(std::unique_lock<std::mutex> lock(m), (         do_something1();         do_something2();         do_something3();     )); 

Comments

Popular posts from this blog

Payment information shows nothing in one page checkout page magento -

tcpdump - How to check if server received packet (acknowledged) -