У меня есть абстрактный интерфейс 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
.
ДОБАВИТЬ: Итак, многие люди указали, что дизайн плохой, в отличие от концепции абстракции и виртуальных функций. Основная причина, по которой я это делаю, — обход пустых вызовов функций для повышения скорости. Поскольку некоторые из Foo()
пусты, я хотел бы удалить их из вектора pi
s, когда Foo()
пусто.
I::foo
. Тогда ты узнаешь! - person Bo Persson   schedule 04.01.2012