Идея
@ Алса об использовании полиморфизма хороша (IMO), но она действительно работает только после , которую вы преобразовали из входного целого числа в фактический тип. Один из способов сделать это состоит в том, чтобы проиндексировать массив указателей на объекты:
MyCallback(int type) {
static A *ptrs[] = { new B, new C, new D};
ptrs[type-1]->perform();
}
Редактировать: на тот случай, если вы не знали, чтобы это работало правильно, perform
должна быть виртуальной функцией, объявленной (возможно, как чистая) виртуальной в A
и определенной в каждом из B
, C
и D
. Необходимо убедиться, что вся подпись функции, а не только имя, одинакова между классами.