Невозможно иметь (не-член-) указатель функции на нестатическую функцию-член.Также невозможно указать указатель функции на связанную функцию.
Обратите внимание, что у типа свободной функции есть аргумент void *cbdata
.Вы не показали документацию используемого вами API, но я хотел бы поспорить, что этот API следует общепринятым и третьим аргументам mg_set_request_handler
также void *cbdata
.Если мое предположение верно, тот же указатель, который был передан при регистрации, будет передан обработчику позже.Его цель - передать данные - например, ваш HttpServer
экземпляр в обратный вызов.
Например:
mg_set_request_handler(ctx_, "/get", [](mg_connection *conn, void *cbdata) {
assert(cbdata);
HttpServer& server = *static_cast<HttpServer*>(cbdata);
server.get_handler_member(conn, cbdata);
}, this);
Если get_handler_member
имеет не публичный доступ, вынужно использовать статическую функцию-член вместо лямбды, которую я использовал в моем примере.Кроме того, аргумент cbdata
get_handler_member
теперь, вероятно, бесполезен и может быть удален.
Не забудьте сохранить экземпляр HttpServer
живым, пока обработчик зарегистрирован.
Также, чтобы повторить: это зависит от моего предположения об API, который вы показали.Внимательно изучите документацию.