将私有方法类成员作为指向函数的指针

passing private method class member as pointer to a function

本文关键字:函数 指针 有方法 成员      更新时间:2023-10-16

我在论坛中搜索了一下,我尝试了几种我在这里找到的解决方案,但无效。我的问题是,我需要将班级的私人成员作为指向函数参数的指针,因此我尝试将此方法静态静止,但它不起作用,遵循代码。

  class monitor {
   public:
    monitor(device *dev);
    ...
    void exec();
    void end();
    virtual ~monitor();
   private:
    static pcap_handler process_packet(u_char *arg, const struct pcap_pkthdr* pkthdr,
                          const u_char * packet);
    static void thread_func(monitor *mon);
      device *dev;
        };

以及方法的使用方式:

void monitor::exec() {
  std::thread t (monitor::thread_func, this);
}
void monitor::thread_func(monitor *mon) {
  pcap_loop(mon->dev->get_descr(), -1, monitor::process_packet, reinterpret_cast<u_char*>(mon)); // error in this line
}
pcap_handler monitor::process_packet(u_char *arg, const struct pcap_pkthdr* pkthdr,
                             const u_char * packet) {
  monitor *mon = reinterpret_cast<monitor*>(arg);
  ...
}

错误是:

error: invalid conversion from ‘void (* (*)(u_char*, const pcap_pkthdr*, const u_char*))(u_char*, const pcap_pkthdr*, const u_char*) {aka void (* (*)(unsigned char*, const pcap_pkthdr*, const unsigned char*))(unsigned char*, const pcap_pkthdr*, const unsigned char*)}’ to ‘pcap_handler {aka void (*)(unsigned char*, const pcap_pkthdr*, const unsigned char*)}’ [-fpermissive]
error: initializing argument 3 of ‘int pcap_loop(pcap_t*, int, pcap_handler, u_char*)’ [-fpermissive]

遵循libpcap函数原型的代码

typedef void (*pcap_handler)(u_char *user, const struct pcap_pkthdr *h, const u_char *bytes);
int pcap_loop(pcap_t *p, int cnt, pcap_handler callback, u_char *user);

我尝试了其他帖子中解释的几种解决方案,为:

pthread in Class

私人成员功能,将指针指向同一类中的私人成员

c :通过指针调用成员函数

功能指针指向类成员功能问题

但是这些帖子都没有解决我的问题,所以有人提示了吗?

谢谢...

process_packet是返回 pcap_handler的函数。它不是pcap_handler

使其成为pcap_handler,将其行更改为:

static void process_packet(u_char *arg, const struct pcap_pkthdr* pkthdr,
                      const u_char * packet);