如何从类函数转换指针

时间:2014-01-29 21:06:37

标签: c++ visual-studio-2012 type-conversion

我正在使用visual studio 2012专业版 我有班级日志:

class log
{
   //some code
   private:
       int check();
};

在另一个类中,我在构造函数中有指向这样的函数的指针:

class fun

{
     //some code
public:
    fun(int (*wsk)());
}

当我尝试从类日志发送检查功能到构造函数时,我得到错误:

typedef int (*fwsk)();
fwsk gwsk = check;
fwsk gwsk = (void *)check;

如何让它运作?

1 个答案:

答案 0 :(得分:0)

成员函数采用不可见的第一个参数this

所以int log::check是一个类型为

的函数指针
typedef int (log::*function_pointer_type)(void);

不幸的是,这永远不会与

相同
typedef int (*fwsk)(void);

你可以在C ++ 11中使用std::bind来解决这个问题并传入一个通用函数。

示例:

typedef std::function<void(int)> fwsk;

class Log
{
public:
   int check(){}
};

class fun
{
   //some code
   public:
      fun(const fwsk& wsk){}
};


int main(int argc, char** argv)
{
  Log l;

  fun f(std::bind(&Log::check,&l));
}