3

私は次のstd::functionようにtypedefできることを知っています:

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標準で許可されていることを確認したかったのです。

4

2 に答える 2

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構文は、通常の関数宣言と同じであり、各引数に名前を付ける(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
于 2013-03-15T15:16:48.627 に答える
2

はい、通常の関数ポインタと同じようにパラメータ名を指定できます。これらの名前は機能を文書化するためにのみ価値がありますが、「実際の」効果はないことに注意してください。

于 2013-03-15T15:06:52.007 に答える