352 + class Impediment 353 + { 354 + public: 355 + ~Impediment() 356 + { 357 + remove_callback(); 358 + } 359 + protected: 360 + friend class CloggableEventSink; 361 + Impediment(std::function<void()> const& remove) : 362 + remove_callback(remove) 363 + { 364 + } 365 + private: 366 + std::function<void()> const remove_callback; 367 + }; 368 + 369 + std::unique_ptr<Impediment> clog() 370 + { 371 + std::unique_lock<std::mutex> lg(lock); 372 + clogged = true; 373 + 374 + return std::unique_ptr<Impediment>(new Impediment( 375 + std::bind(std::mem_fn(&CloggableEventSink::unclog), this))); 376 + }
This approach seems complicated to me. C.f.
template<class Cloggee> class Clogger { public: Clogger(Cloggee& cloggee) : cloggee{cloggee} { cloggee.clog(); } ~Clogger() { cloggee.unclog(); } private: Cloggee& cloggee; Clogger(Clogger const&) = delete; Clogger& operator=(Clogger const&) = delete; };
« Back to merge proposal
352 + class Impediment std::function< void()> const& remove) : callback( remove) void()> const remove_callback; ptr<Impediment> clog() lock<std: :mutex> lg(lock); ptr<Impediment> (new Impediment( std::mem_ fn(&CloggableEv entSink: :unclog) , this)));
353 + {
354 + public:
355 + ~Impediment()
356 + {
357 + remove_callback();
358 + }
359 + protected:
360 + friend class CloggableEventSink;
361 + Impediment(
362 + remove_
363 + {
364 + }
365 + private:
366 + std::function<
367 + };
368 +
369 + std::unique_
370 + {
371 + std::unique_
372 + clogged = true;
373 +
374 + return std::unique_
375 + std::bind(
376 + }
This approach seems complicated to me. C.f.
template<class Cloggee> Cloggee& cloggee) : cloggee{cloggee} { cloggee.clog(); }
class Clogger
{
public:
Clogger(
~Clogger() { cloggee.unclog(); }
private:
Cloggee& cloggee;
Clogger(Clogger const&) = delete;
Clogger& operator=(Clogger const&) = delete;
};