c++ - 将指向类方法的指针作为函数参数传递

标签 c++ class pointers

我有课

class A{
    A(/*constructor arguments*/);
    double MethA(double);
};

我想传递方法MethA在带有指向函数的指针的函数中:

double function(double (*f)(double), double x){
    return f(x);
}

所以我要做的就是打电话

A a(/*constructor arguments*/);
function(a.MethA,1.0);

但它无法编译。

我很确定这个问题在其他地方得到了回答,但我找不到在哪里,因为我不确定我使用的术语是否正确。我是否试图将类方法上的指针作为函数参数传递?或者,将函数指针作为类的成员传递...我很困惑:-(

最佳答案

当您需要使用指向成员函数的指针时,您需要传递两个单独的东西:

  • 调用什么成员函数
  • 在什么实例上调用它。

在 C++ 中,您无法像您希望的那样将它们组合在一个构造中:

A a;
bar(a.foo);

不是有效的 C++。

相反,你必须这样做:

A a;
bar(a, &A::foo)

并相应地声明并实现 bar() :

void bar(A &a, void (A::*method)()) {
    a.*method();
}

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

相关文章:

c++ - C++扫描字符串的方法

Java 性能/内存消耗 : Class vs. 数组

javascript - 如何在普通 JavaScript 中切换多个类?

c - 将指针数组分配给数组

c++ - boost_asio_handler_invoke_helpers::invoke 是否仍然是在 boost asio 1.70 中调用完成处理程序的受支持方式?

c++ - Qt TCP/IP 通信只能在本地工作,但在网络中会丢失

c++ - 为什么分配成员会引发 NullReferenceException?

c - 为什么int指针可以存储字符串?

c++ - C memcpy 以小字节序复制字节

c++ - 如何使用 asio 库打开 usb 端口并接收它的数据?