我很遗憾这个潜在的复杂且令人困惑的标题,但在尝试销毁英语之前,我会把我正在看的内容放在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)
。这不是确切的系统,因为它是专有的,但它使用相同的概念。对于所有密集目的,函数都是全局的。此外,我想保留我想要创建的系统,但如果我有类似的更好的东西,我会很乐意采用它。
答案 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;
};