M>>Ну, вообще-то нормальный компилятор может понять, когда можно напрямую вызвать. Если напрямую вызвать нельзя, то не пойму, как тебе if else поможет
M>Т.е. он может вызов виртуальной функции ClientCommon::OnRecv, превратить в что-то типа: M>if (v-table==Client1) call Client1::OnRecv M>else M>if (v-table==Client2) call Client2::OnRecv M>else M>call ClientCommon::OnRecv
M>У него же нет гарантий, что у меня не появиться Client3 ?
Нет конечно. В твоем случае если реализаций немного и расширяться это дело не будет, то наверное быстрее будет свич работать. Надо смотреть что нагенерится, но в общем случае if else будут тормознее свича. vtbl — ну тут хз, оно может в кеше лежать и будет быстро. Ну и vtbl — это константная задержка вне зависимости от количества реализаций, if — если компилятор не додумается сделать табличку — будет совсем плохим, switch — говорят, что в этом случае компилятор генерит табличку и оно довольно эффективно, но по идее, тоже зависит от числа альтернатив
А вообще — я б просто бенчмарки бы писал и тестировал, что быстрее