У меня есть пара классов FS и DS, которые оба являются производными от другого класса S. У меня есть функция, в которую я передаю S * (т.е. FS или DS), которая дополнительно вызывает другую функцию, передаваемую в том же S *. В этой последней функции мне нужно иметь другое поведение в зависимости от того, является ли S FS или DS, но я бы предпочел разрешить эту ветвь во время компиляции, потому что она находится на критическом пути. Как мне этого добиться? Что-то, связанное с метапрограммированием и / или constexpr, я чувствую - я не хочу делать виртуальный вызов для каждого прохода
посторонние детали для краткости опущены
class S {};
class FS : public S {};
class DS : public S {};
void func_2(Space *s) {
// common code
// branch based on lowest type of s
// common code
}
void func_1(Space *s) {
// common code
func_2(s);
}