
Hi, boost::mutex is a model of Lockable but do not conforms to a SharedLockable, UpgradeLockable concepts. Do you think that we can make an adapter of boost::mutex to be a model of SharedLockable, UpgradeLockable or there is something I've missed? Consider the following situation: template <class SharedLockable> void f(SharedLockable&l) const { /*< externally locked generic const function>*/ boost::shared_lock<Lokable> lock(smtx); // ... some read operations } // elsewhere boost::mutex mtx; /*< the external user prefer to use a mutex and not a shared_mutex >*/ // { shared_lockable_adapter smtx(mtx); /*< mtx must be adapted to a shared_mutex >*/ f(smtx); /*< to call f without compiler errors >*/ //.. } Do you know a simple way to achieve this? Do you think this adapter could be of general use? The class shared_lockable_adapter can be defined as follows: template <typename Lockable> class shared_lockable_adapter { shared_lockable_adapter(Lockable& mtx): mtx_(mtx) {} ~shared_lockable_adapter() {} void lock_shared() {mtx_.lock();} void unlock_shared() {mtx_.unlock();} bool try_lock_shared() { return mtx_.try_lock();} void lock() {mtx_.lock();} void unlock() {mtx_.unlock();} bool try_lock() { return mtx_.try_lock();} // other functions .... private: Lockable& mtx_; }; Comments? _____________________ Vicente Juan Botet Escriba