首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在sigaction sa_sigaction中设置类方法?

如何在sigaction sa_sigaction中设置类方法?
EN

Stack Overflow用户
提问于 2019-09-16 15:59:54
回答 2查看 596关注 0票数 0

我有一个类,我希望将类方法设置为sigaction的参数,因为我需要使用一些类属性:

代码语言:javascript
复制
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::bindreinterpret_cast结合使用,但没有起作用。

那么,如何将sa_sigaction设置为类方法呢?

注意:应该是类方法,而不是静态方法或函数。

EN

回答 2

Stack Overflow用户

发布于 2019-09-16 16:07:41

如果您查看sigaction::sa_sigaction的声明,您会发现它是void (*)(int,siginfo_t*,void*)。这是函数的指针。

注意:它应该是类方法,而不是静态方法或函数。

不能,因为指向函数的指针不能指向非静态成员函数.必须将指向非成员或静态成员函数的指针作为信号处理程序传递。如果您愿意,该函数可以调用非静态成员函数(只要该函数是异步信号安全的)。

我需要使用一些类属性

确保这些属性是volatile sig_atomic_t类型的。

票数 1
EN

Stack Overflow用户

发布于 2019-09-16 16:08:58

代码语言:javascript
复制
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;
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57960577

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档