В основном, есть два пути.
Одним из них является использование отражения , это означает: полагаться на информацию о типе среды выполнения , обычно полученную из необработанных строк. Как сказать: у меня есть некоторый объект класса X, и я хочу вызвать метод с именем "doTheFoo ()" для этого объекта.
См. здесь для всех деталей славы.
Несколько лучший способ - использовать класс MethodHandle вместо класса «сырого» метода отражения. См. здесь для ручек.
1110 Но потом: отражение происходит во время выполнения. Ваш код компилируется нормально, но если вы ошибаетесь в деталях, он взрывается во время выполнения.
Таким образом, я предлагаю изучить лямбды, основанные на функции , см. здесь .
На самом деле можно объявить функцию как чисто виртуальную и все еще определить реализацию для нее в базовом классе.
class Abstract {
public:
virtual void pure_virtual(int x) = 0;
};
void Abstract::pure_virtual(int x) {
// do something
}
class Child : public Abstract {
virtual void pure_virtual(int x);
};
void Child::pure_virtual(int x) {
// do something with x
Abstract::pure_virtual();
}
Можно предоставить определение для чистой виртуальной функции. Проверьте GotW № 31 для получения дополнительной информации.