在我需要修改的代码中,有一个函数的声明,它有几个参数。正如预期的那样,每个参数都以下列方式声明:arg_type arg_name
。但是,参数是以下列方式声明的:bool (*filter) (const row<aaa::bbb>& entity)
我不理解这个声明。
所以,我认为我们有一个可以有布尔值的参数,但(*filter)
和(const row<aaa::bbb>& entity)
是什么意思?
ADDED
为了更清楚,这里有更多背景信息:
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);
答案 0 :(得分: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);
}
答案 1 :(得分:2)
它声明了一个名为filter
的指针变量,它指向一个函数(而不是像你可能习惯的对象)和签名bool(const row<aaa::bbb>&)
,这意味着一个函数需要row<aaa::bbb>
。 1}}通过const ref并返回bool
。
在C ++中声明函数指针的语法通常为return-type (*variable-name)(argument-list)
,为您提供类型为variable-name
的名为returntype (*)(argument-list)
的变量,有点奇怪,但您已习惯了它