Я написал класс Event
в качестве обертки вокруг функций обратного вызова, реализованный как std::function
s. Это то, что он выглядит следующим образом:C++ - std :: function как параметр для функтора
class Event
{
public:
Event() : default_handler([]() {});
Event(const std::function<void()> handler) : default_handler(handler);
void SetHandler(std::function<void()> handler)
{
custom_handler = handler;
}
void operator()(void)
{
default_handler();
custom_handler();
}
private:
const std::function<void()> default_handler;
std::function<void()> custom_handler;
};
Затем внутри другого класса, у меня есть экземпляр события:
class Control
{
public:
Control();
//Should call constructor Event()
Event myEvent1;
//Should call constructor Event(std::function<void()>)
Event myEvent2([]() {/*do stuff... */})
};
Это, однако, не будет компилировать на VC++, генерируя ошибки C3646 (неизвестный спецификатор переопределения) и ошибка C4430 (отсутствующий спецификатор типа - предполагаемый int) для обоих обработчиков с более синтаксическими ошибками для myEvent2. Где я неправ?
В будущем отправьте фактические ошибки. Несмотря на то, что вы не можете их понять, у них действительно есть полезная информация! – Yakk