Имам абстрактен интерфейс 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