c++ - 如何选择函数指针类型?

标签 c++ templates

在我的 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/

相关文章:

c++ - CodeBlocks Qt HelloWorld.exe 已停止工作 (C++)

c++ - 通过连续内存实现多态性

c++ - 使用模板元编程计数?

c++ - 无法使用重载运算符<<来打印对象的值

c++ - 为什么我不能从转换的字节(字符)数组中调用虚函数?

c# - native NuGet 包安装失败

c++ - 如何仅传递绑定(bind)函数的第二个参数?

c++ - 在编译时找出整数类型的最小值/最大值的位数

c++ - 如何让模板类型名类的两个(或更多)实例使用相同的函数

C++模板类成员函数特化