Вот (довольно некрасивое) решение.
Основная проблема в том, что вам нужны только значения A
и B
, которые являются константами, но вы вынуждены включить полное определение.Решением было бы вручную рассчитать размер и записать его в нужном месте.
Но легко забыть обновить значение при изменении A
и B
, поэтому мы должны каким-то образом автоматически выполнить вышеуказанную работу.
Для этого вы можете написать генератор кода, который генерирует такой код в заголовочном файле:
const size_t OverlayDataSize = /* the calculated size */;
и вызывать эту программу каждый раз, когда вы перестраиваете весь проект.(Например, написав Makefile.)
Этот генератор может включать A.hpp
и B.hpp
, вычислить max(sizeof(A), sizeof(B))
и запустить printf
или что-то подобное для написания сгенерированного кода.Другие исходные файлы должны только #include
сгенерированный источник.
Поскольку в C ++ нет модульной системы (которая позволит вам скрывать некоторые внутренние сущности) или полного средства метапрограммирования (которое позволяет нам писать некоторый код, который генерирует другой код), я могу думать только об этомдовольно некрасивый способ добиться этого.Но в любом случае, это должно работать.