Нет способа достичь именно этого. Фактически, функции-члены здесь не имеют значения: нет способа объявить обычную функцию, которая возвращает указатель на свой собственный тип функции. Объявление будет бесконечно рекурсивным.
В случае обычной функции вы можете использовать тип void (*)()
в качестве «универсального» типа указателя на функцию (точно так же, как void *
часто используется для типов данных). Для указателей на функции-члены типа void (A::*)()
. Вы должны использовать reinterpret_cast
для этой цели, хотя. Однако такое использование (преобразование туда-обратно) оказывается тем, когда определяется поведение reinterpret_cast
.
Конечно, вы будете вынуждены использовать приведение для преобразования указателя в и из этого типа. AFAIK, существуют элегантные основанные на шаблонах решения с промежуточным временным объектом шаблона, который выполняет приведение.
Возможно, вы захотите взглянуть на эту Полученную запись .
P.S. Обратите внимание, что использование типа void *
в качестве промежуточного типа для указателей на функции запрещено языком. Хотя такое незаконное использование может показаться «работающим» с обычными указателями на функции, у него нет абсолютно никаких шансов работать с указателями на функции-члены. Указатели на функции-члены обычно являются нетривиальными объектами, размер которых превышает размер указателя void *
.