【问题标题】: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】:

    是的,您可以像使用常规函数指针一样指定参数名称。请记住,尽管这些名称仅对记录功能有价值,但它们没有“实际”效果。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-09-29
      • 1970-01-01
      • 2022-11-16
      • 2021-10-30
      • 1970-01-01
      • 2020-03-12
      • 2013-07-17
      • 1970-01-01
      相关资源
      最近更新 更多