在C++中,不能声明静态虚函数,也不能将非静态函数转换为C风格函数指针。
现在,我有一个使用函数指针的普通C SDK。
我需要填充一个结构体,其中包含多个函数指针。我计划使用一个具有许多静态纯虚方法的抽象类,并在派生类中重新定义它们并用它们来填充结构体。但直到那时,我才意识到在C++中不允许静态虚函数。
此外,这个C SDK的函数签名没有userData参数。
有什么好的替代方案吗?我能想到的最好的方法是在每个派生类中定义一些纯虚方法GetFuncA()、GetFuncB()等和一些静态成员FuncA()/FuncB(),它们将由GetFuncX()返回。然后,抽象类中的一个函数将调用这些函数以获取指针并填充结构体。
编辑 回答John Dibling的问题,以下操作会很好:
现在,我有一个使用函数指针的普通C SDK。
我需要填充一个结构体,其中包含多个函数指针。我计划使用一个具有许多静态纯虚方法的抽象类,并在派生类中重新定义它们并用它们来填充结构体。但直到那时,我才意识到在C++中不允许静态虚函数。
此外,这个C SDK的函数签名没有userData参数。
有什么好的替代方案吗?我能想到的最好的方法是在每个派生类中定义一些纯虚方法GetFuncA()、GetFuncB()等和一些静态成员FuncA()/FuncB(),它们将由GetFuncX()返回。然后,抽象类中的一个函数将调用这些函数以获取指针并填充结构体。
编辑 回答John Dibling的问题,以下操作会很好:
class Base
{
FillPointers() { myStruct.funA = myFunA; myStruct.funB = myFunB; ...}
private:
CStruct myStruct;
static virtual myFunA(...) = 0;
static virtual myFunB(...) = 0;
};
class Derived1 : public Base
{
Derived1() { FillPointers(); }
static virtual myFunA(...) {...};
static virtual myFunB(...) {...};
};
class Derived2 : public Base
{
Derived2() { FillPointers(); }
static virtual myFunA(...) {...};
static virtual myFunB(...) {...};
};
int main()
{
Derived1 d1;
Derived2 d2;
// Now I have two objects with different functionality
}
ol'
是什么意思吗? - math