无法调用C信号方法中的类方法

Cannot call a class method in C signal method

本文关键字:类方法 方法 信号 调用      更新时间:2023-10-16

我想在信号方法中使用一个类方法

signal(SIGALRM, syncro);

syncro是另一个类方法的名称。

void states::syncro( int parameter )
{
}

我尝试使用syncro&syncrostates::syncro&states::syncro,但它们在编译时都会抛出错误消息。

error: argument of type ‘void (states::)(int)’ does not match ‘void (*)(int)’

在这种情况下,您只能调用自由函数或静态类函数

signal的签名是

typedef void (*sighandler_t)(int);
sighandler_t signal(int signum, sighandler_t handler);

这意味着它只接受指向自由函数或静态函数的指针。

请注意,您应该始终有一个对象来调用成员函数,例如,如果您有

struct S
{
    void method();
}
S obj;

只能调用obj.method(),但不能调用S::method()method(),并且指向S::method的指针的类型为void (S::*)()

但是,如果您的S::method()被声明为静态,您可以用S::method()来调用它。

这就是为什么指向自由函数的指针与指向成员函数的指针不兼容的原因。