Типы указателей не эквивалентны: type_name_t
- это указатель на функцию (указатель на свободную функцию), тогда как &Test::type_name
- это указатель на функцию-член.Это то, что говорит вам компилятор.
Причина, по которой вы не можете преобразовать указатель на функцию-член в простой указатель на функцию, заключается в том, что (нестатическая) функция-член имеет скрытый параметр this
.Вы не можете вызывать функцию-член с помощью простого указателя на функцию, поскольку невозможно передать параметр this
.Вы пытаетесь объяснить это, задав свой параметр type_name_t
a CLASS_NAME*
- концептуально это правильно, но C ++ не работает таким образом.
Вместо того, что вам нужно сделатьдолжен указывать type_name_t
как указатель на функцию-член:
typedef void (CLASS_NAME::*type_name_t)();
(не проверено. Надеюсь, синтаксис правильный; я не использую указатели на функции-члены ежедневно.)