【问题标题】:Parameter names in a std::function typedefstd::function typedef 中的参数名称
【发布时间】:2013-03-15 14:58:04
【问题描述】:
我知道我可以像这样键入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 标准允许。
【问题讨论】:
标签:
c++
c++11
boost
std-function
boost-function
【解决方案1】:
是的。
这种指定函数类型的形式,没有命名函数的声明符,在语法上是 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 语法与普通函数声明中的语法相同,它允许每个参数具有名称(declarator)或不具有名称(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
【解决方案2】:
是的,您可以像使用常规函数指针一样指定参数名称。请记住,尽管这些名称仅对记录功能有价值,但它们没有“实际”效果。