首页 > 解决方案 > 在类中将函数作为参数传递

问题描述

我在将函数作为 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();
}

在这种情况下,整体结构看起来很奇怪,但在完整的代码中更有意义(具体来说,我理想地寻找一种不涉及重构函数所有权的解决方案)。这与错误一起编译error: invalid use of non-static member function double Obj::MyFunction(double),这表明我的调用方式有问题print(MyFunction)。粗略的理解是不能自己MyFunction调用​​的,但是再多的包含指针、引用等,都没有成功得到代码编译。我应该如何正确调用MyFunction

标签: c++function

解决方案


您可以使用 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();
}


推荐阅读