繁体   English   中英

std :: function typedef中的参数名称

[英]Parameter names in a 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标准所允许的。

是。

这种指定函数类型而没有声明符来命名函数的形式在语法上是一个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语法与普通函数声明中的语法相同,它允许每个参数具有名称( 声明符 )或不具有( 抽象声明符)(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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM