c++ - 指向类中方法的函数指针数组

标签 c++ class function-pointers

我有一个类 say Method with multiple functions for solving PDE's with different methods similar to the add, subtract, multiply... functions below.类中的另一个函数(本示例中的 DoMath)调用这些方法。用户可以更改方法类型(加、减、...),所以我想创建一个方法指针数组(method_pointer),其中通过选择整数“method_type”来选择方法。我有一个 C 版本,其中所有内容都在一个文件中,而不是一个类的成员,这工作正常;但是,当指针是类的成员时,我得到“Method_pointer 不是函数或函数指针”错误。我无法获得正确的语法,将不胜感激任何帮助。下面是我正在尝试做的示例程序。

Method.h 头文件

class Method{
public:
    Method();
    ~Method();

void add(int, int, int);
void subtract(int, int, int);
void multiply(int, int, int);
void divide(int, int, int);

void DoMath(int, int, int);

void set_method( const int method_number);

private:
   int method_type;
};

Method.cc 源

#include "method.h"

typedef void (*method_function)(int, int,int);

Method::Method(){
    method_type=2;
}

Method::~Method(){
}

void Method::set_method( int method_number){
    method_type=method_number;
}

void Method::add( int a, int b, int c){
    c=a+b;
}

void Method::subtract( int a, int b, int c){
    c=a+b;
}

void Method::multiply( int a, int b, int c){
    c=a+b;
}

void Method::divide( int a, int b, int c){
    c=a+b;
}

void Method::DoMath(int x, int y, int result){
   method_function method_pointer[4]={add,subtract, multiply,divide};
   result=method_pointer[method_type](x,y);
}

主.cc

int main(int argc, const char * argv[]) {
    Method *method;
    int x=2;
    int y=3;
    int result=0;
    Method.DoMath(x,y,result);
    return 0;
}

最佳答案

指向方法的指针与指向函数的指针有点不同。因此,要声明一个,您可以这样写:

typedef void (Method::*method_function)(int, int,int);

并且您必须指定要为其调用此方法的对象:

method_function method_pointer[4] = {&Method::add, &Method::subtract,  &Method::multiply, &Method::divide};
method_function func = method_pointer[method_type];
result = (this->*func)(x,y);

但是,如果您要进行设计,请不要忘记将函数的第三个参数设为引用。否则,您将无法提取结果。因此,正确的 typedef 应该是:

typedef void (Method::*method_function)(int, int,int&);

并且您必须相应地更改您的方法签名。

最后,为什么要在主函数中使用指针?您可能应该使用堆栈变量(或至少初始化指针),如果这样做,您需要在对象而不是类上调用 DoMath:

Method method;
// ...
method.DoMath(x, y, result);

关于c++ - 指向类中方法的函数指针数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31708302/

相关文章:

c++ - 向类提供 const 变量

c++ - 问题插入到 STL::map

c++ - 核心配置文件与版本字符串?仅在 mesa 10.0.1 中获取 GLSL 1.3/OGL 3.0

c++ - 如何修改指针指向的数组

c++ - 有条件地在类中创建成员

c++ - 成员类与#includes

C++:如何将一个函数(不知道其参数)传递给另一个函数?

c++ - 如何通过字符串找到指向函数的指针

c++ - 在 Qt 中的线程之间发送对象作为信号参数

c++ - 在 C++ 中创建一个集合<char>