这个论点的声明是什么意思:"type (*name1) (const type& name2)"?

What this declaration of the argument mean: "type (*name1) (const type& name2)"?

本文关键字:type name1 const name2 是什么 声明 意思      更新时间:2023-10-16

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

它声明了一个名为filter的指针变量,它指向一个签名为bool(const row<aaa::bbb>&)的函数(而不是像您可能习惯的那样指向一个对象(,这意味着一个函数通过const-ref获取row<aaa::bbb>并返回bool

在C++中声明函数指针的语法通常是return-type (*variable-name)(argument-list),给您一个名为variable-namereturntype (*)(argument-list)类型的变量,这有点奇怪,但您已经习惯了