Как я могу использовать этот указатель с указателем на функцию-член - PullRequest
0 голосов
/ 20 апреля 2019

У меня есть typedef для указателя на функцию:

typedef bool(WlanApiWrapper::* (connect_func) )(WLAN_AVAILABLE_NETWORK, const char *, const char *);

и у меня есть метод, который возвращает указатель на функцию:

const auto connect_method = map_algorithm_to_method(*network)

Так что я хочу вызвать это так:

(*this.*connect_method)(*network, ssid, pass);

но получает ошибку:

Error (active)  E0315   the object has type qualifiers that are not compatible with the member function CppWlanHack C:\Projects\CppWlanHack\CppWlanHack\WlanApiWrapper.cpp  52  

но когда я так называю:

WlanApiWrapper f;
(f.*connect_method)(*network, ssid, pass);

все строит ...

Как я могу вызвать метод, не создавая объект, потому что у меня уже был объект (этот указатель)

Ответы [ 2 ]

1 голос
/ 20 апреля 2019

Сообщение об ошибке звучит так, будто вы вызываете неконстантный указатель на функцию-член внутри константной функции-члена. this - это const WlanApiWrapper * внутри функции-члена const, поэтому the object (*this) has type qualifiers (const) that are not compatible with the (non-const) member function.

Чтобы решить эту проблему, вы можете сделать connect_method const или сделать функцию-член, которая содержит (this->*connect_method)(*network, ssid, pass); non-const.

0 голосов
/ 20 апреля 2019

Назовите это так:

((*this).*connect_method)(*network, ssid, pass);

Это должно работать со всеми компиляторами.

Для получения дополнительной информации прочитайте Как избежать синтаксических ошибок при вызове функции-члена с помощьюуказатель на функцию-член? в C ++ FAQ

...