我在 C++ 中将函数作为参数传递时遇到问题。我在这里重新创建了一个最小的工作示例:
#include <iostream>
using namespace std;
void print(const double &func(double)) {
cout << func(1) << endl;
}
class Obj {
public:
double MyFunction(double x);
void PrintFunction();
};
void Obj::PrintFunction(){
print(MyFunction);
}
double Obj::MyFunction(double x) {
return x + 1;
}
int main() {
Obj object;
object.PrintFunction();
}
Run Code Online (Sandbox Code Playgroud)
在这种情况下,整体结构看起来很奇怪,但在完整的代码中更有意义(具体来说,我理想地寻找一个不涉及重组函数所有权的解决方案)。编译时出现错误error: invalid use of non-static member function double Obj::MyFunction(double),这表明我的调用方式有问题print(MyFunction)。我粗略的理解是MyFunction不能单独调用,但是没有包含多少指针、引用等,都成功地得到了代码进行编译。我应该如何正确打电话MyFunction?
您可以使用 std::bind 传递成员方法。
#include <iostream>
#include <memory>
#include <functional>
void print(std::function<double(double)> f) {
std::cout << f(1) << std::endl;
}
class Obj {
public:
double MyFunction(double x);
void PrintFunction();
};
void Obj::PrintFunction(){
auto t = std::bind(&Obj::MyFunction,this,std::placeholders::_1);
print(t);
}
double Obj::MyFunction(double x) {
return x + 1;
}
int main() {
Obj object;
object.PrintFunction();
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
434 次 |
| 最近记录: |