Доступ к функции с помощью макросов - PullRequest
1 голос
/ 16 мая 2019

Эта проблема возникает, когда я хочу получить адрес функций в макросах после знака (::). У него всегда есть конечный пробел, который сообщает об ошибке.

Я использую G ++ в Mac OS Mojave i386.

Например, у меня есть класс:

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

Есть ли способ решить проблему, чтобы указатель можно было получить с помощью макроса?

1 Ответ

2 голосов
/ 16 мая 2019

Тип указателя на функцию отличается от типа указателя на функцию-член.

Обычно тип указателя на любой элемент отличается от типа обычного указателя.

Чтобы сделать эту работу, вам нужно будет объявить accab как указатель на член:

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

Стандарт C ++ имеет примечание относительно этого:

Тип «указатель на член» отличается от типа «указатель», то есть указатель на член объявляется только указателем на синтаксис объявления объявления члена, но никогда не указывается синтаксисом объявления указателя.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...