2014-12-15 4 views
28

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

typedef int(*fp)(int);

или

using fp = int(*)(int);

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

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

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

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

ответ

25

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

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

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

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

main() -> int {... } 

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

+0

Спасибо, по какой-то причине я забыл о необходимости 'auto' в возвращаемых типах возвращаемых функций. Имеет смысл. – vsoftco

+0

Только что понял :) Спасибо большое, ответит так же, как было на 5 секунд быстрее :) – vsoftco

13

Вы хотите один из них в зависимости от того, используете ли вы using декларацию или typedef :

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

Спасибо, по какой-то причине я забыл о необходимости «авто». – vsoftco

Смежные вопросы