c++ - 使用宏的函数访问

标签 c++ macros

这个问题是我想获取宏中的函数在符号(::)后面的地址时引起的,总是有一个尾随的空格,报错。

我在 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++ 标准有一个 note关于这个:

The type “pointer to member” is distinct from the type “pointer”, that is, a pointer to member is declared only by the pointer to member declarator syntax, and never by the pointer declarator syntax.

关于c++ - 使用宏的函数访问,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56167455/

相关文章:

c++ - 如何在 C++ 中存储大矩阵

c++ - QGraphicsItem 上的事件过滤器

c++ - 我在这里做 double 到 float 的转换吗

c++ - 同时滚动不同的 Widget

scala - 如何区分宏中的三引号和单引号?

c++ - 在大型模板参数列表的情况下宏的便利性

c++ - 在 C++ 应用程序/库中,pimpl 在哪里使用?有什么例子吗?

c - 函数宏参数到函数宏

C宏包含 "incomplete"三元运算符

c++ - 使用 Doxygen 记录发送到 MACRO C++ 的函数