c++ - 在类中将函数作为参数传递

标签 c++ function

<分区>

我在 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

最佳答案

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

关于c++ - 在类中将函数作为参数传递,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59219160/

相关文章:

php - wordpress "function &get_post"中此类函数定义的含义

c++ - 类模板中未发生隐式转换

c++ - 哪些线程受 CPU 限制

function - 调用函数而不考虑其参数类型

c - 如何将数组作为地址发送到函数

function - 正确使用参数

c++ - MoveInsertable 和 MoveConstructible 之间有什么区别?

c++ - 如何让 struct 一次只存储一个变量? C++

c++ - std::iterator_traits libstdc++ 和 libc++ 之间的分歧

java - 从脚本文件调用 jar 文件内的函数