У меня есть абстрактный интерфейс I
, в котором определено virtual void Foo()
, наряду с другими функциями. Есть некоторые подклассы, в которых Foo
переопределено, и другие, в которых Foo
нет. Теперь, учитывая I* pi
, можно ли узнать, переопределено ли Foo
? То есть я хочу знать, будет ли pi->Foo()
вызывать I::Foo()
или X::Foo()
, где X
- это некоторый тип, в котором Foo
переопределен. Я думаю, что это можно сделать, сравнивая указатели функций, между &I::Foo
и &pi->Foo
, но не знаю точно, как это сделать. Обратите внимание, что я не знаю конкретный тип pi
во время выполнения, поэтому я не могу сравнивать указатели функций напрямую по &I::Foo != &X::Foo
.
ADD:
Итак, многие люди указали, что дизайн плохой, вопреки концепции абстракции и виртуальных функций. Основная причина, по которой я это делаю - это обход пустых вызовов функций для повышения скорости. Поскольку некоторые из Foo()
пусты, я бы хотел удалить их из вектора pi
s, когда Foo()
пуст.