c++ - Is there a shorthand for std::lock_guard<std::mutex> lock(m)? -


exactly question states. in c++, ideally 11, curious 14 , later too, there shorthand syntax for:

std::mutex somemutex; std::lock_guard<std::mutex> lg(somemutex); 

ideally infers type of mutex avoid refactoring if ever wanted change std::recursive_mutex.

in other words, way this:

std::mutex somemutex; std::lock_guard lg(somemutex); 

or

auto lg = make_lock_guard(somemutex); 

for type deduction powers of modern c++, seems awfully redundant go typing std::lock_guard<std::mutex> every time want make one.

for pre-c++17:

template<class mutex> std::lock_guard<mutex> make_lock_guard(mutex& mutex) {     mutex.lock();     return { mutex, std::adopt_lock }; } 

use as:

std::mutex somemutex; auto&& lg = make_lock_guard(somemutex); 

this takes advantage of fact copy-list-initialization doesn't create additional temporary (even conceptually). one-parameter constructor explicit , can't used copy-list-initialization, lock mutex first , use std::adopt_lock constructor.

the return value directly bound lg, extends lifetime of reference, once again creating no temporary (even conceptually) in process.


Comments