我有一个类,我希望将类方法设置为sigaction的参数,因为我需要使用一些类属性:
class MyClass {
void action(int sn, siginfo_t* t, void* ctx) {
...
}
};
int main() {
MyClass c;
struct sigaction sig_action;
sig_action.sa_sigaction = c.action; // ERROR!
}甚至我也尝试过将std::bind与reinterpret_cast结合使用,但没有起作用。
那么,如何将sa_sigaction设置为类方法呢?
注意:应该是类方法,而不是静态方法或函数。
发布于 2019-09-16 16:07:41
如果您查看sigaction::sa_sigaction的声明,您会发现它是void (*)(int,siginfo_t*,void*)。这是函数的指针。
注意:它应该是类方法,而不是静态方法或函数。
不能,因为指向函数的指针不能指向非静态成员函数.必须将指向非成员或静态成员函数的指针作为信号处理程序传递。如果您愿意,该函数可以调用非静态成员函数(只要该函数是异步信号安全的)。
我需要使用一些类属性
确保这些属性是volatile sig_atomic_t类型的。
发布于 2019-09-16 16:08:58
class MyClass {
void action(int sn, siginfo_t* t, void* ctx) {
...
}
};
MyClass c;
void action(int sn, siginfo_t* t, void* ctx) {
c.action(sn, t, ctx);
}
int main() {
struct sigaction sig_action;
sig_action.sa_sigaction = action;
}https://stackoverflow.com/questions/57960577
复制相似问题