无法调用C信号方法中的类方法
Cannot call a class method in C signal method
我想在信号方法中使用一个类方法
signal(SIGALRM, syncro);
syncro是另一个类方法的名称。
void states::syncro( int parameter )
{
}
我尝试使用syncro
、&syncro
、states::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()
来调用它。
这就是为什么指向自由函数的指针与指向成员函数的指针不兼容的原因。
相关文章:
- c++, 在子类中,如何在没有对象的情况下访问父类的方法?
- 调用具有未标识类型的类的方法
- 是否可以使用基类非虚拟方法中的派生类虚拟方法?
- 如何访问存储在 std::variant 中的类的方法
- 如何将类成员方法的参数列表自动填充写入可变参数?
- C ++类型特征:确保子类实现方法
- 静态 std::map instatiation 在类的方法中调用构造函数吗?
- 派生类调用父类的方法,该方法调用重写的虚拟方法调用错误的方法
- 将一个类的方法指针存储到另一个类中
- 通过基类接受方法转发派生 UniquePtr 的右值会移动引用而不是复制
- 从内部类中的方法从包含类调用方法
- 对纯抽象类中方法的未定义引用
- 如何在该接收类之外声明嵌套类的方法
- C++初始化之前派生类调用基类的方法
- 如果类"A"具有指向另一个类的指针,则"B" A 可以访问 B 类公共方法
- 为什么派生类的实例从基类调用方法?
- 使用包含互斥锁的类的方法实例化 cpp11 线程
- 类的方法和对象。参考?智能指针?简单的初始化?
- 为什么允许将派生类的方法static_cast为基类的方法?
- 所有类实例方法的打印语句最后都在打印吗?