Подтвердить что ты не робот

Использование указателя функции с возвращаемым типом возврата

Есть некоторые пользователи Stack Overflow, которые настоятельно рекомендуют всегда использовать новое соглашение типа возвращаемого типа С++ 11 при написании функций, таких как main()->int. Я вижу преимущества, так как он делает обозначение однородным. Однако при объявлении указателя функции я не могу найти способ использования формы возвращаемого возврата, т.е. Может объявить либо

typedef int(*fp)(int);

или

using fp = int(*)(int);

для указателя функции, принимающего int и возвращающего int.

Есть ли способ использования нового синтаксиса обратной записи при объявлении такого указателя функции? Например, что-то вроде

using fp = (*)(int)->int;

но это не компилируется. Если нет, есть ли причина, по которой новый синтаксис не применим к указателям на функции?

4b9b3361

Ответ 1

Вы должны использовать auto

using fp = auto (*)(int) -> int;
typedef auto (*fp)(int) -> int; // alternatively

Синтаксис типа Trailing return означает, что вы помещаете auto перед именем функции, чтобы указать, что следует использовать тип возвращаемого значения (или в случае С++ 14). Для указателей функций применяется то же правило, за исключением того, что оно не может выводить его (по понятным причинам).

Это верно и для функций, но ваш пример

main() -> int {... }

недействителен либо без предшествующего auto

Ответ 2

Вы хотите один из них в зависимости от того, используете ли вы объявление using или typedef:

using fp = auto (*)(int)->int;
typedef auto (*gp)(int) -> int;