Способы определить, была ли переопределена виртуальная функция C++ в производном классеC++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Способы определить, была ли переопределена виртуальная функция C++ в производном классе

Сообщение Anonymous »

Вкратце: По указателю базового класса C++, который указывает на экземпляр производного класса, как можно во время выполнения определить, была ли нечистая виртуальная функция (с реализацией в базовом классе) повторно реализована в производном классе?

Контекст:
Я пишу библиотеку C++ для решения определенных классов математических уравнений. Библиотека предоставляет класс Equation с несколькими виртуальными функциями, которые пользователи библиотеки используют в качестве базового класса для конкретного уравнения, которое они хотят решить. Библиотека также предоставляет класс Solver, который принимает уравнение * в качестве параметра конструктора. Затем пользователь пишет код следующего вида:

Код: Выделить всё

class MyEquation : public Equation
{ ... } // equation definition here

int main()
{
MyEquation myEqn;
Solver solver(&myEqn);
solver.Solve();
}
Если определенные комбинации виртуальных функций в Equation не переопределены в производном классе уравнений, некоторые ресурсоемкие части алгоритма, выполняемые объектом Solver, могут быть опущены. Поэтому я хотел бы знать, какие функции были переопределены в конструкторе Solver, а какие вместо этого будут запускать реализацию по умолчанию в Equation.
  • Я хотел бы сделать это прозрачным для пользователей библиотеки, поэтому я не ищу решение, в котором, например, пользователь устанавливает некоторые флаги в конструкторе своего производного уравнения, указывая, какие функции были переопределены.
  • Одним из возможных решений является установка по умолчанию реализаций виртуальных функций в Equation для установки частного флага в классе Equation; конструктор класса Solver может затем очистить этот флаг, запустить виртуальную функцию и проверить значение флага, чтобы увидеть, была ли вызвана реализация в Equation. Однако мне бы хотелось этого избежать, потому что простая установка флага каждый раз при выполнении виртуальной функции значительно замедляет алгоритм (выполнение этих виртуальных функций существенно увеличивает время выполнения программы, а реализации по умолчанию просто возвращают константу).


Подробнее здесь: https://stackoverflow.com/questions/474 ... derived-cl
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»