在我的 C++ 代码中,有时我需要从某些库调用 C 函数。有时,这些功能是成对的,例如锁定功能后跟解锁功能。我想确保我不会忘记调用解锁函数。所以我试图编写一个模板类来处理它,但我无法正确处理。
template <class T>
class CInReleaser
{
public:
CInReleaser(T func) : _func(func) {}
~CInReleaser() { _func();}
T _func;
};
void somefunc()
{
DATA something;
// call locking function
lock_something(something);
CInReleaser<XXX> release(boost::bind(unlock_something,something));
.
.
}
函数unlock_something()应该在somefunc()函数结束时被调用。但是我无法预测 XXX 类型。我怎样才能编译它?
最佳答案
创建一个包装工厂函数来利用函数模板参数推导:
template<typename T>
CInReleaser<T> makeReleaser(T func) {
return CInReleaser<T>(func);
}
然后在代码中:
auto release = makeReleaser(boost::bind(unlock_something,something));
关于c++ - 如何选择函数指针类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23487564/