-2

在我需要修改的代码中,有一个具有多个参数的函数声明。正如预期的那样,每个参数都以下列方式声明:arg_type arg_name. 但是,on of the arguments 是通过以下方式声明的: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是一个指向函数的指针,它接受 aconst row<aaa::bbb>&作为唯一参数并返回 a 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,它指向一个带有签名的函数(而不是你可能习惯的对象)bool(const row<aaa::bbb>&),这意味着一个函数接受一个row<aaa::bbb>by const ref 并返回一个bool

在 C++ 中声明函数指针的语法一般是return-type (*variable-name)(argument-list),给你一个名为variable-nametype的变量returntype (*)(argument-list),这有点奇怪,但你习惯了。

于 2013-03-14T11:03:33.443 回答