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

时间:2012-02-13 18:07:51

标签: c++ signals class-method

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

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)’

1 个答案:

答案 0 :(得分:3)

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

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()来调用它。

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