#winapi #cpp11 #cpp
и снова доброго вечера всем форумчанам. Возникла проблема с переопределением объектов std::functionи будто вещь это не особо сложная, а разобраться никак не получается. есть у меня некоторый класс: введите код здесь #include class ProcessEventHandler { public: std::function ProcessCrashHandler; std::function ProcessStopHandler; }; с его помощью я буду реализовывать Колбек в следующий класс class ProcessManager : public ProcessEventHandler { public: ProcessManager(const std::string &sFilePath); ProcessManager(const _int32 &ProcessID); ~ProcessManager(); ............ private: void onProcessStart(); void onProcessWatch(); void onProcessCrash(); void onProcessStopped(); void onProcessManulyStop(); ........... }; проблема заключается в том, что для объектов std::function ProcessCrashHandler; std::function ProcessStopHandler; в классе потомке нужно присвоить функции void onProcessCrash(); void onProcessStopped(); пытаюсь это сделать в конструкторе ProcessManager::ProcessManager(const std::string &sFilePath) : m_ppiProcInfo(), m_sCommandLine(sFilePath), m_isRunning(false) { ProcessCrashHandler = onProcessCrash; ProcessStopHandler = &ProcessManager::onProcessStopped; m_pcEventLoger = new EventLogger(getCurrentDirPath()); onProcessStart(); } я как только уже не пробовал ничего не получается, через лямда пробовал тоже не получилось. не могу понять то ли у меня руки кривые, или с компилятором-то не в порядке Помогите пожалуйста ошибки error C2679: binary '=' : no operator found which takes a right-hand operand of type 'overloaded-function' (or there is no acceptable conversion) error C3867: 'ProcessManager::onProcessCrash': function call missing argument list; use '&ProcessManager::onProcessCrash' to create a pointer to member
Ответы
Ответ 1
Не-не, так не пойдёт. Дело в том, что onProcessCrash — не функция! Поэтому вы не сможете сохранить её не только в переменной типа std::function, но даже обыкновенному указателю на функцию типа void (*)(void). На самом деле это функция-член, для её вызова вам нужен конкретный this. Привязка this осуществляется просто: при помощи std::bind. Попробуйте так: ProcessCrashHandler = std::bind(&ProcessManager::onProcessCrash, this);
Комментариев нет:
Отправить комментарий