В C ++ невозможно объявить статическую виртуальную функцию, также не приведите нестатическую функцию к указателю функции в стиле C.
Теперь у меня есть простой старый SDK C, который интенсивно использует указатели на функции,
Я должен заполнить структуру несколькими указателями на функции.Я планировал использовать абстрактный класс с кучей статических чисто виртуальных методов, переопределить их в производных классах и заполнить ими структуру.Только тогда я понял, что статические виртуальные недопустимы в C ++.
Также эта сигнатура функции C SDK не имеет параметра userData.
Есть ли хорошая альтернатива?Лучшее, что я могу придумать, - это определить некоторые чисто виртуальные методы GetFuncA (), GetFuncB (), ... и некоторые статические члены FuncA () / FuncB () в каждом производном классе, которые будут возвращены GetFuncX ().Тогда функция в абстрактном классе будет вызывать эти функции, чтобы получить указатели и заполнить структуру.
Редактировать Отвечая Джону Диблингу, было бы здорово сделать это:
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
}