Имена параметров в std :: function typedef

Я знаю, что могу напечатать std::function вот так:

typedef std::function<void (const std::string&)> TextChangedHandler

Разрешено ли указывать имена параметров в typedef, чтобы сделать его более самодокументированным? Например:

typedef std::function<void (const std::string& text)> TextChangedHandler

Я могу добавить имена параметров, и он прекрасно компилируется в Visual C ++ 2010, но я хотел убедиться, что это разрешено стандартами C ++ 03 / C ++ 11.

3

Решение

Да.

Эта форма указания типа функции без декларатора, называющего функцию синтаксически тип-идентификатор (8.1):

type-id:
type-specifier-seq abstract-declarator[opt]

abstract-declarator:
ptr-operator abstract-declarator[opt]
direct-abstract-declarator

direct-abstract-declarator:
direct-abstract-declarator[opt] ( parameter-declaration-clause ) cv-qualifier-seq exception-specification
direct-abstract-declarator[opt] [ constant-expression ]
( abstract-declarator )

Параметр декларирование придаточного синтаксис такой же, как в обычных объявлениях функций, и он позволяет каждому аргументу иметь имя (описатель) или нет (абстрактно-описатель) (8.3.5):

parameter-declaration-clause:
parameter-declaration-list[opt] ...[opt]
parameter-declaration-list[opt] , ...

parameter-declaration-list:
parameter-declaration
parameter-declaration-list , parameter-declaration

parameter-declaration:
decl-specifier-seq declarator
decl-specifier-seq declarator = assignment-expression
decl-specifier-seq abstract-declarator[opt]
decl-specifier-seq abstract-declarator[opt] = assignment-expression
5

Другие решения

Да, вы можете указать имена параметров так же, как с обычными указателями на функции. Имейте в виду, что эти имена полезны только для документирования функции, они не имеют «реального» эффекта.

2