Я думаю, что самый простой способ объяснить мою проблему - показать упрощенный пример того, что я пытаюсь сделать.Доступ к производным функциям в полиморфизме
Я использую библиотеку, которая имеет базовый класс в качестве примера, принимает следующее.
class base {
void function();
}
Теперь производные классы отделены от библиотеки, и все они содержат одну и ту же функцию.
class derived1 : public base {
void derivedFunction();
}
class derived2 : public base {
void derivedFuction();
}
В функции, которую я создал, я определяю пару производных классов и строю структуру, содержащую базовый класс. Затем я устанавливаю несколько значений в массиве и использую полиморфизм и устанавливаю значение thisClass как производный класс.
void runMe() {
derived1 *thisDerivedClass = new derived1;
derived2 *thatDerivedClass = new derived2;
struct data {
const char * name;
int someInt;
base thisClass;
} dataSets [] = {
{"test1", 0, thisDerivedClass},
{"test2", 1, thatDerivedClass}
};
Когда я пытаюсь вызвать функцию из производной, очевидно, она не работает. Я пытаюсь выяснить, как заставить это работать. Виртуальные классы не имеют смысла, поскольку мне пришлось бы многое изменить. Другим способом, который я знаю, как это сделать, является динамическая и статическая типизация, что не имеет смысла для этой ситуации.
const int count = sizeof(dataSets)/sizeof(data);
for(int i = 0; i < count; i++) {
dataSets[i].thisClass->derivedFuction();
}
}
Что было бы самым лучшим способом сделать это?
Виртуальные классы? Похоже, вам нужны виртуальные * функции *, а не классы. Кроме того, ваша структура имеет объект 'base'. Разве это не должно быть «основанием»? – PaulMcKenzie
Моя ошибка, да и да. –