Я работаю с Android NDK.У нас есть основной метод, такой как:
void android_main(struct android_app *app)
{
// onAppCmd is the event:
app->onAppCmd = engine_handle_cmd;
}
Определение engine_handle_cmd
:
static void engine_handle_cmd(struct android_app *app, int32_t cmd)
{
// Event handling code here...
}
Вместо использования статического метода, как описано выше, я хотел бы создать синглтонКласс менеджера событий и используйте его для обработки события onAppCmd
, как показано ниже:
Объявление менеджера событий:
#pragma once
class EventManager
{
public:
static EventManager &getInstance();
void handleCommand(struct android_app *app, int32_t cmd);
~EventManager();
private:
EventManager();
EventManager(EventManager const&);
void operator=(EventManager const&);
};
Тогда определение класса:
#include "EventManager.h"
EventManager &EventManager::getInstance()
{
static EventManager instance;
return instance;
}
EventManager::~EventManager() {}
EventManager::EventManager() {}
void EventManager::operator=(EventManager const &) {}
void EventManager::handleCommand(struct android_app *app, int32_t cmd)
{
// Event handling code...
}
Теперь, когда я пытаюсь в моем методе:
void android_main(struct android_app *app)
{
EventManager &manager = EventManager::getInstance();
app->onAppCmd = manager.handleCommand();
}
Я получаю ошибку компилятора:
reference to non-static member function must be called.
Если я попробую следующее:
void android_main(struct android_app *app)
{
EventManager &manager = EventManager::getInstance();
app->onAppCmd = &manager.handleCommand();
}
Я получаю сообщение об ошибке компилятора:
cannot create a non-constant pointer to member function
.
Могу ли я в любом случае заставить этот подход работать без использования метода static
?Любые предложения для практики ставок на классах обработчиков событий также приветствуются.Спасибо.