Добавьте их в статическую карту внутри (this.getClass (). getName ()) конструктор родительских классов (или создайте по умолчанию), но это будет обновляться во время выполнения. Если ленивая инициализация - это вариант, вы можете попробовать этот подход.
Это еще один случай, когда разница между C и C ++ имеет значение.
В C, const int FOO
имеет внешнюю связь и, следовательно, должны быть включены в двоичную.
Вместо этого компиляция с g ++ или clang ++ дает вам желаемую оптимизацию, поскольку FOO
имеет внутреннюю связь в C ++.
Вы можете достичь оптимизации в режиме C, явно запросив внутреннюю связь для FOO
через
static const int FOO = 1;
И clang, и gcc с включенной оптимизацией по времени соединения (-flto
) также удаляются. неиспользованный символ, даже если связь внешняя. (Live с и без LTO.)