Пока есть два ответа: это и это .
Очевидное отличие состоит в том, что один использует std::function
, а другие используют указатели на функции.Это не главное различие !!
Ключевым моментом является то, что функции-члены нестатические функции-члены .Таким образом, они не типа void()
.
Они имеют тип void(reader::*)()
.Таким образом, они могут быть вызваны, только если задан объект типа читатель;это можно понять как скрытый параметр.
Первый ответ просто решает проблему, указав правильный тип.Это можно сделать с помощью указателей функций (как показано) или с использованием std::function
(последнее намного дороже!).
Второй ответ устраняет проблему привязка указатель функции на конкретный экземпляр класса.После связывания тип действительно void()
.Это нельзя сделать с помощью необработанных указателей на функции (поскольку они могут указывать только на функцию, а не на пару объект / функция!).