我知道我可以像这样输入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标准所允许的。
答案 0 :(得分:5)
是
这种指定函数类型而没有声明者命名函数的形式在语法上是 type-id (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 )
parameter-declaration-clause 语法与普通函数声明中的语法相同,它允许每个参数都有一个名称(声明符)或不具有( em> 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
答案 1 :(得分:2)
是的,您可以像使用常规函数指针一样指定参数名称。请记住,虽然这些名称仅对记录功能有价值,但它们没有“真正的”效果。