-2

変更する必要のあるコードには、いくつかの引数を持つ関数の宣言があります。予想どおり、すべての引数は次のように宣言されますarg_type arg_name。ただし、引数の1つは次のように宣言されています:bool (*filter) (const row<aaa::bbb>& entity)そして私はこの宣言を理解していません。

だから、ブール値を持つことができる議論があると思いますが、(*filter)どういう(const row<aaa::bbb>& entity)意味ですか?

追加した

より明確にするために、ここにもっとコンテキストがあります:

void func(int a, double b, bool (*filter) (const row<aaa::bbb>& entity))

追加2

このように機能しますか?

bool myFilter( const row<aaa::bbb>& e) { /* ... */ }

bool applyFilter( bool (*filter)(const row<aaa::bbb>& entity, bool& x)){
   return filter(x&entity);
}

applyFilter(myFilter entity, x);
4

2 に答える 2

6
bool (*filter) (const row<aaa::bbb>& entity)

filterは関数へのポインタであり、const row<aaa::bbb>&を唯一のパラメータとして受け取り、を返しますbool

bool myFilter( const row<aaa::bbb>& e) { /* ... */ }

bool applyFilter( bool (*filter)(const row<aaa::bbb>&)){
    return filter(somerow);
}
于 2013-03-14T11:02:39.963 に答える
2

これは、という名前のポインタ変数を宣言しますfilter。これは、署名付きの関数(おそらく慣れているオブジェクトではなく)を指します。これは、 byconstrefを受け取って。を返すbool(const row<aaa::bbb>&)関数を意味します。row<aaa::bbb>bool

C ++で関数ポインタを宣言する構文は、一般的には、型return-type (*variable-name)(argument-list)という名前の変数を提供します。これには少し奇妙ですが、慣れています。variable-namereturntype (*)(argument-list)

于 2013-03-14T11:03:33.443 に答える