Преобразование иерархии C ++ для использования статического полиморфизма - PullRequest
0 голосов
/ 11 марта 2012

У меня есть следующая иерархия классов (на самом деле классов намного больше), мне было интересно, можно ли реорганизовать следующее, чтобы использовать статический полиморфизм?После большого количества профилирования накладные расходы от вызовов виртуальных методов на самом деле довольно велики, и он надеялся максимально их оптимизировать.

1 Ответ

2 голосов
/ 30 марта 2012

Поскольку вы упоминаете 18% затрат на вызовы vf, я предполагаю, что в каждом классе много виртуальных функций. В этом случае можно попробовать это:

base * pObj;
switch(pObj->getTypeIdentifier())
{
  case 1:
    static_cast<derivedtype1*>(pObj)->func1;
    static_cast<derivedtype1*>(pObj)->func2;
    ...

  case 2:
    static_cast<derivedtype2*>(pObj)->func1;
    static_cast<derivedtype2*>(pObj)->func2;
    ...
}

Это в основном то, что виртуальная диспетчеризация делает для каждого func1, func2 и т. Д. Разница здесь в том, что вам нужно переключаться только один раз, даже если вы получаете доступ к нескольким функциям - эквивалент одной виртуальной диспетчеризации.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...