Я считаю, что вы на неправильном пути.
То, что ваш компилятор не "знал", что у вас есть объявление функции, - это только половина истории. Если вы объявляете функцию, а не используете ее, а затем определяете ее, возможно, в другом модуле перевода, компилятор не сможет встроить ваш код во время оптимизации. Современные компиляторы могут использовать оптимизацию времени ссылки, но эта функция должна быть включена в командной строке.
Поэтому я бы посоветовал вам переупорядочить код, а не использовать объявления функций из (автоматически генерируемых) заголовков. Просто переместите определения перед использованием в вашем коде.
В C ++ иногда полезно писать код «только для заголовков», и разделение вашего программного обеспечения на заголовок и исходный файл не всегда является лучшей идеей. Для этого есть свои плюсы и минусы, но использование заголовков с полной реализацией часто предлагает лучшую оптимизацию путем встраивания. Как сказано: Также возможно через LTO.
Кстати: задача генерации файлов заголовков из реализации уже описана здесь: Автоматически генерировать файл C ++ из заголовков?