Предположим, у меня есть некоторый класс A:
a.h:
class A {
virtual unsigned foo() {
return 0;
}
Затем у меня есть много классов (назовем эти промежуточные звенья), наследующих от A (класс B, класс C ... et c) , Эти классы НИКОГДА не переопределят foo ().
b.h
class B : pubic A{
bool override_foo = true;
....
}
c.h:
class C : pubic A{
bool override_foo = false;
}
Тогда у меня есть много классов, наследуемых от промежуточных. Класс D, E и др. c. Только один, если они когда-либо будут наследоваться от одного промежуточного звена, т. Е. Это соотношение 1: 1 между этими классами и промежуточными звеньями. Гарантируется, что только (и всегда) будет один из этих классов, унаследованный от одного из промежуточных.
Теперь эти классы МОГУТ переопределять foo. Однако, если они это делают, и промежуточный класс, от которого они наследуют, не определяет override_foo как true, мне нужно, чтобы компиляция провалилась.
Так, например, если у нас есть класс D:
d.h:
class D : pubic B{
unsigned foo() override();
}
Компиляция прошла бы нормально, так как B имеет override_foo, определенное как true.
Однако, нам это не удастся:
e.h:
class E : pubic C{
unsigned foo() override();
}
Так как C имеет override_foo как false.
Это что-то достижимое? К сожалению, в этой проблеме очень мало гибкости. Я работаю в компании, где промежуточные классы (B, C) могут быть изменены очень незначительно. Они созданы из компиляции частной структуры. Я мог бы добавить к ним члена или любого другого макро-мага c. То же самое для базового класса A. Однако классы внуков, D, E, определены другими инженерами для переопределения частей инфраструктуры, и мне нужно запретить им это делать, если у промежуточных классов нет некоторых ключевых атрибутов.
Спасибо!