将函数指针作为参数传递,其中函数指针的参数是函数函数指针参数的子函数

时间:2014-05-26 20:46:34

标签: c++ pointers function-pointers function-parameter

我很遗憾这个潜在的复杂且令人困惑的标题,但在尝试销毁英语之前,我会把我正在看的内容放在C ++代码中。

//The parent struct
struct Parameters
{ 
};
//the derived struct
struct ParametersDerived : public Paramters
{
     //Paramters
     int paramData;

     //return values
     int retData;
};

//the function i am passing the function pointer to
void Function(void(*FunctionPointer)(Parameters*));

//the function pointer i am passing to the function
void FunctionToPass(ParametersDerived* param)
{
//TODO: do stuff here
}

//Call the function with the function pointer
Function(FunctionToPass);

这让我很困惑,因为我需要将函数指针传递给函数,但所述函数指针的参数会有所不同。我将向该函数传递多个不同的函数指针,因为它保留了函数指针的列表。每个函数指针都有一个唯一的id,用于调用该函数,然后通过参数传递参数。 void CallFunction(unsigned int FuncId, Parameters* param)。这不是确切的系统,因为它是专有的,但它使用相同的概念。对于所有密集目的,函数都是全局的。此外,我想保留我想要创建的系统,但如果我有类似的更好的东西,我会很乐意采用它。

1 个答案:

答案 0 :(得分:2)

您可以更改函数以void *作为参数。

//the function i am passing the function pointer to
void Function(void(*FunctionPointer)(void*));

//the function pointer i am passing to the function
void FunctionToPass(void* voidparam)
{
    ParametersDerived* param = (ParametersDerived*)voidparam;
    //TODO: do stuff here
}

当然,正确的参数传递给函数是非常重要,因为编译器不能再检查类型安全了。

向这里回答:

我刚刚注意到您的评论,为了确保类型安全(假设您确实希望保留'函数指针'方法),您可以在base参数中添加一个成员结构,例如int ParameterType,并在被调用的函数中检查它。

//The parent struct
struct Parameters
{ 
    int ParameterType;
};