У меня следующая ситуация:
class A
{
public:
A(int whichFoo);
int foo1();
int foo2();
int foo3();
int callFoo(); // cals one of the foo's depending on the value of whichFoo
};
В моей текущей реализации я сохраняю значение whichFoo
в элементе данных в конструкторе и использую switch
в callFoo()
, чтобы решить, какой из foo вызывать. Кроме того, я могу использовать switch
в конструкторе, чтобы сохранить указатель вправо fooN()
для вызова в callFoo()
.
У меня вопрос, какой путь более эффективен, если объект класса A создается только один раз, тогда как callFoo()
вызывается очень большое количество раз. Таким образом, в первом случае мы имеем несколько выполнений оператора switch, тогда как во втором случае есть только один переключатель и несколько вызовов функции-члена с использованием указателя на него. Я знаю, что вызов функции-члена с использованием указателя происходит медленнее, чем простой вызов. Кто-нибудь знает, если эти издержки больше или меньше, чем стоимость switch
?
Разъяснение: я понимаю, что вы никогда не знаете, какой подход дает лучшую производительность, пока не попробуете и не рассчитаете время. Однако в этом случае у меня уже реализован подход 1, и я хотел выяснить, может ли подход 2 быть более эффективным, по крайней мере, в принципе. Кажется, что это может быть, и теперь для меня имеет смысл потрудиться реализовать это и попробовать.
О, и мне также больше нравится подход 2 по эстетическим соображениям. Я думаю, я ищу оправдание для его реализации. :)