如何使用实例化类的成员函数作为函数指针?
之前:
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
}
}
知道我该怎么做吗?
谢谢!
答案 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;
...
}
...
};