c++ - Initializing a static POSIX semaphore inside a class -
class semaphore { private: static sem_t sem_id; }
in cpp:
sem_init(&semaphore::sem_id, 0, 0);
obviously , compiler won't let me run code outside of function. it's not type can initialized value. how do it?
you wrap sem_id
in own class performs sem_init
on default-construction (and sem_destroy
on destruction; don't forget that!).
sadly, sem_t
not class can't inherit , must instead compose it:
#include <semaphore.h> class scoped_sem_t { public: scoped_sem_t() { sem_init(&sem, 0, 0); } ~scoped_sem_t() { sem_destroy(&sem); } sem_t& get() { return sem; } private: sem_t sem; }; class semaphore { private: static scoped_sem_t impl; // use semaphore::impl.get() }; scoped_sem_t semaphore::impl; // (don't forget this!)
(n.b. untested guess should work…)
(also, not best example of class design, gives gist.)
otherwise, sadly, there no ways neatly. write sem_init
@ start of main
instead, careful not reference semaphore::sem_id
other static initialiser.
Comments
Post a Comment