这个参数的声明意味着什么:“type(* name1)(const type& name2)”?

时间:2013-03-14 11:01:38

标签: c++ pointers

在我需要修改的代码中,有一个函数的声明,它有几个参数。正如预期的那样,每个参数都以下列方式声明: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);

2 个答案:

答案 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)的变量,有点奇怪,但您已习惯了它