使用宏访问功能

Function access using macros

本文关键字:功能 访问      更新时间:2023-10-16

当我想在符号之后获得宏中的功能地址( ::(时引起此问题。

我在Mac OS Mojave i386中使用G 。

例如,我有课:

struct A{
  void b();
};

和一个宏:

#define ACC(name) &A::name

我用它来获取A::b的指针:

void(*accab)() = ACC(b);

,我会得到这样的错误:

error: cannot initialize a variable of type 'void (*)()' with an rvalue of type 'void (A::*)()'

之后,我尝试放一个支架,但我得到了:

error: call to non-static member function without an object argument

有什么方法可以解决问题,以便可以通过宏来获取指针?

函数指针的类型与指针的类型与成员函数的类型不同。

通常,指向任何成员的指针的类型与普通指针的类型不同。

要使这项工作您将已将accab声明为指向成员的指针:

void(A::* accab)() = ACC(b);

C 标准有一个关于以下内容的注释:

类型的"指向成员指针"与"指针"类型不同,也就是说,向成员的指针仅由指向成员声明语法的指针声明,而从未由指针声明器语法。