Хочу перейти с виртуального интерфейса на статический. Если упрощенно, то вместо:
struct I { virtual void foo() { /* nothing */ } };
struct A : I { void foo() final { /* impl */ } };
struct B : I { /* no foo */ };
Иметь
struct A { void foo() { /* impl */ } };
struct B { /* no foo */ };
Я могу отличить
A
от
B
, проверив статически наличие
void foo()
, но есть нюанс - нет аналога
final
/
override
. То есть, если я ошибусь в сигнатуре функции или опечатаюсь в названии, компилятор меня не поправит. Есть способ решить эту проблему? Я думал в сторону каких-нибудь варнингов, которые будут реагировать на неиспользуемый метод. Компилятор - gcc.