调用函数指针的向量

时间:2018-08-13 06:32:34

标签: c++ function pointers

我试图在属于一个类并在另一类中调用的C ++中使用函数指针向量。例如:在类BoundaryCondition(文件BoundaryCondition.h)中,我将函数指针初始化为:

class BoundaryConditions{

public:
// Constructor function
BoundaryConditions(int id = 0);             
vector <void (BoundaryConditions::*) (Face &, int, int)> func2bcond;                

void fixedValue(Face &face, int id, int rkStep);
// and other functions with similar definition as fixedValue
}

在另一个类(DG.h)中,我初始化了一个BoundaryCondition实例数组,类似

BoundaryCondition *bcond;

,然后使用new(在DG.cpp文件中)将内存分配给bcond变量。对于每个bcond [i]实例,我需要将内存分配给函数指针,如下:

this->bcond[i].func2bcond.resize(totNoOfVariable);

我正在使用调整大小而不是推回,因为文件读取可能未按要求的顺序进行。接下来,根据边界条件文件,我将函数分配给该函数指针(同样在DG.cpp中):

bcond[i].func2bcond[j] = (&BoundaryConditions::fixedValue);

到目前为止,代码可以正常编译。尝试调用这些函数时出现错误。我称它为DG.cpp。代码如下:

(bcond[i].*func2bond[j])(f,1,2);

我一直收到以下错误:

 error: 'func2bcond' was not declared in this scope

我很确定这仅是*或括号的位置,但是我被卡在这里,而且在stackoverflow上没有得到任何具体的解决方法。

预先感谢

1 个答案:

答案 0 :(得分:0)

方法上的指针在调用时需要实例,因此您的代码可能类似于:

(bcond[i].*(bcond[i].func2bond[j]))(f, 1, 2);

或拆分表达式:

auto methodPtr = bcond[i].func2bond[j]; // auto is `void (BoundaryConditions::*) (Face &, int, int)`
(bcond[i].*methodPtr)(f, 1, 2);