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