我想创建一个守卫,它在构造时锁定函数并在销毁时解锁它,例如使用false
and调用函数true
。
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
?
使用 boost::function
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));
有任何想法吗?也许还有另一种更简单的方法?