c ++ |如何使用成员函数作为func指针

时间:2016-11-11 18:19:49

标签: c++ pointers lambda function-pointers

如何使用实例化类的成员函数作为函数指针?

之前:

main.cpp :

 void packetShower(data_t const& data) {
         // showing so data
   }

 ....

 // called with :
 std::shared_ptr<Net::ARawSocket> rawSock = std::make_shared<Net::LinuxRawSocket>(packetShower);

它只是有效。 packetShower函数是我main.cpp

中的一个简单静态方法

现在:

我有一个具有Instance实例函数的实例化类packetShower

namespace App {
class Instance {
public:
    Instance() = default;
    ~Instance() = default;

    int run(int ac, char *av[]);
private:
    void init();

    void packetShower(data_t const& data)
  };
}

并且,在我的run()方法中,我尝试创建一个指向我的packetShower函数的函数指针:

namespace App {

void Instance::init() {
 ...  
 }

void Instance::packetShower(data_t const& data) {
       .....
 }

int Instance::run(int argc, char** argv) {
   init(); 

   // and I tried : 

      void (Instance::*shower)(data_t const& data) = &Instance::packetShower; 

      std::shared_ptr<Net::ARawSocket> rawSock = std::make_shared<Net::LinuxRawSocket>(shower);


     // but It generate a big error

   }
 }

知道我该怎么做吗?

谢谢!

1 个答案:

答案 0 :(得分:0)

packetShower声明为static并将Instance::packetShower分配给shower

如果函数指针将用作回调,则this指针可以作为用户数据传递,如果允许更改函数声明,则packetShower的声明将如下更改:< / p>

class Instance {
...
    static void packetShower(data_t const& data, void *userData) {
       Instance *i = (Instance)userData;
       ...
    }
...
};