在下面的C ++简单代码中,我介绍了一个简单的过程'count_out',它接受一个(指向a)函数f(i),它接受一个int参数并返回一个int,并计算这个函数连续10个点并打印出结果。
现在'count_out'可以正常使用像'multiplyby2'这样的函数,它接受一个int并返回一个int。 但是,我想用'add'这样的函数来提供'count_out'过程,它接收两个int;但为了使'add'看起来像'int f(int)'函数,我将第二个参数(b)指定为例如10。 但是我怎样才能让C ++理解这一点:用指定的第二个参数“添加”作为一个接受单个int并返回int的函数,以便我可以将它提供给'count_out'?
// C++ code snippet:
#include <iostream>
using namespace std ;
int multiplyby2 (int i) {
return 2 * i ;
}
int add (int a, int b) {
return (a + b) ;
}
void count_out( int (*f) (int) ){
for(int i=1; i<=10; i++) cout << f(i) << endl ;
}
void main() {
count_out ( &multiplyby2 ) ; // works fine.
count_out ( &add ( ,10) ) ; // produces compilation errors!
//note that 'add (int a , 10 )' would be a function which returns a + 10 .
}
答案 0 :(得分:2)
lambda应该可以解决这个问题:
count_out([](int n) { return add(n, 10); });
非捕获lambda可以隐式转换为相应的函数指针类型。