我有两个类;A类通知B类一些事件。
typedef void (*callbackb) (B *, int param1);
class A
{
callbackb callme;
B *parent;
};
class B
{
A ai;
void set_cb() { ai.callme = cb_handler; }
static void cb_handler (B *obj, int param1) { obj->real_handler(param1); }
void real_handler(int param1);
};有两个等价的声明,即回调b和cb_handler,但其中一个是函数指针,另一个是函数。是否可以更改其中一个或两者,以便两者都链接到单个原型声明?
发布于 2017-11-08 06:02:16
您不能按照需要定义 cb_handler。但是,您当然可以基于相同的原型声明它们,并让编译器检查它。它还阻止您隐藏指针语义,这是一件好事。下面是操作步骤:
因此,现在cb_handler和callme是按照相同的类型声明的。在定义cb_handler时,您需要指定完整的原型,但它仍然可以是头中的inline类外定义。
编译器将检查cb_handler的定义是否与声明匹配,因此如果cb_handler与callbackb不同,则会通知您。
https://stackoverflow.com/questions/47172504
复制相似问题