Я хочу создать охрану, которая блокирует функцию при построении и разблокирует ее при уничтожении, например. вызывая функцию с false
и true
.как создать защиту, похожую на boost :: lock_guard
class A {
void enable(bool flag);
};
внутри другого метода, я хочу использовать:
A::anotherMethod(...) {
block_guard(A::enable); // now A::enable(false)
// some operation
} // now A::enable(true)
мои идеи:
с помощью шаблона
template < class T >
class block_guard {
T t_;
public:
block_guard(T& t) : t_(t) {
t_(false);
}
~block_guard() {
t_(true);
}
};
вопрос, как создать экземпляр шаблон? возможно, с boost::bind
?
используя подталкивание :: функция
class block_guard {
typedef boost::function< void (bool) > T;
T t_;
public:
block_guard(T& t) : t_(t) {
t_(false);
}
~block_guard() {
t_(true);
}
};
это работает отлично, но вызов кажется очень сложным с
block_guard bg(boost::function< void (bool) >(boost::bind(&A::enable, pointer-to-A, _1));
любые идеи? Может быть, есть еще один, гораздо более простой способ?
Можно ли добавить способ лямбда-выражения? я не очень хорошо знаком с этими ... –
'block_guard guard ([this] (bool b) {enable (b);});' –