I made a class in C++ today and I'm surprised it's not something that was already in the standard library

basically it's a class called LockBox<C> that holds an instance of C which is inaccessible, unless you use the Unlocker<C> class like so:

C instance;
LockBox<C> box(instance);
*pass box around to different threads*
...
*later in some thread*
Unlocker<C> instance(box);
instance->do_c_thing();

and it's thread safe C:

Show thread

Unlocker<C> is a friend class that locks a mutex inside of LockBox<C> and acts as a lock_guard for that mutex. it also uses the -> and * operators to let you access members of the underlying C class

Show thread
Follow

you can also make the Unlocker const so you can only access const members of C

there is a wrinkle because there is no copy constructor since std::mutex has no copy constructor, but you could potentially get around this by wrapping the mutex in a std::shared_ptr

Show thread
Sign in to participate in the conversation
Cybrespace

cybrespace: the social hub of the information superhighway jack in to the mastodon fediverse today and surf the dataflow through our cybrepunk, slightly glitchy web portal support us on patreon or liberapay!