Не подходит для вашей проблемы с LUA, но может быть в других библиотеках:
Если функция запрашивает указатель функции, такой как func (void * param, ...), и вы можете убедиться, что время жизни вашего объекта больше, чем указатель на хранимую функцию, то технически вы также можете использовать указатель метода (выглядит так же стек), но C ++ предотвращает непосредственное приведение указателей методов к указателям на функции.
Но с небольшой хитростью вы также можете привести указатели методов к указателям на функции:
template<typename M> inline void* GetMethodPointer(M ptr)
{
return *reinterpret_cast<void**>(&ptr);
}
Используя это, вы можете использовать указатели методов, например, с libmicrohttpd:
this->m_pDaemon = MHD_start_daemon(MHD_USE_THREAD_PER_CONNECTION, this->m_wPort, NULL, NULL, reinterpret_cast<MHD_AccessHandlerCallback>(GetMethodPointer(&CMyWebServer::AccessHandlerCallback)), this, MHD_OPTION_END);
Но знайте об этом. Вы должны заботиться о жизни этого объекта. Кроме того, соглашения о вызовах должны совпадать.