不久前,我遇到了一个问题,即如何将 bind 返回的可调用对象(称为 A)传递给另一个函数(称为 B),该函数需要一个参数,该参数是指向来自 A 的函数的指针。我发现bind 返回的可调用 A 具有非常复杂的类型,因此放弃了我的方法。
然后我在功能标题中了解了“功能”,这听起来好像可以解决我的问题。然而,经过几次尝试,我又被挫败了!也许你能帮忙?这是一些不起作用的代码:
#include <iostream>
#include <functional> //Library for "bind" and "function"
#include <cmath>
using namespace std;
using namespace std::placeholders; //for _1, _2, _3 ...
//praboloid function
int parab(int x, int y) {
return pow(x,2) + pow(y,2);
}
//Take an integer and a pointer to a function
int funk(int a, int (*f)(int) ) {
return (*f)(a);
}
int main() {
auto f = bind(parab, _1, 0); // Bind the second value to 0
function<int (int)> fp = f;
//Any of the following lines creates and error
function<int (*)(int)> fp = f; //Error!
funk(-5, f); //Error!
funk(-5, &f); //Error!
funk(-5, fp); //Error!
funk(-5 &fp); //Error!
return 0;
}
我要做的就是首先使用 bind 创建一个新的可调用对象,然后将该绑定函数作为参数发送到另一个函数。如果可能的话,我不想处理 bind 返回的杂乱类型。
我对解决这个问题的替代方法持开放态度。