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

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()对其进行调用。

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

07-24 09:29