Как обеспечить инициализацию статических переменных без явного включения заголовочного файлаC++

Программы на C++. Форум разработчиков
Ответить Пред. темаСлед. тема
Anonymous
 Как обеспечить инициализацию статических переменных без явного включения заголовочного файла

Сообщение Anonymous »

Рассмотрим следующий пример: класс с именем ObjectFactory определен для управления созданием нескольких классов. Эти управляемые классы должны быть зарегистрированы на фабрике, чтобы мы могли создавать соответствующие экземпляры.
Поскольку управляемых классов существуют сотни, для упрощения процесса регистрации я представляю следующий класс:
p>

Код: Выделить всё

template
class ObjectRegistrar {
public:
ObjectRegistrar() {
ObjectFactory::Instance()->Register(CLASS_NAMES(T), []() { return std::make_unique(); });
}
};
В каждом управляемом классе, например A:

Код: Выделить всё

class A {
private:
inline static ObjectRegistrar _registrar{};
};
добавляется статическая переменная-член. В начале программы все статические переменные будут инициализированы, тем самым регистрируя класс A в ObjectFactory. Однако если некоторые управляемые классы не включены явно (несмотря на то, что они скомпилированы, как указано в выводе компилятора), статическая переменная не инициализируется. Я подозреваю, что он удален компоновщиком, поскольку статическая переменная никогда не используется.
Что я могу сделать, чтобы гарантировать, что все статические переменные инициализируются правильно, без явного включения всех управляемых классов? Включение всех управляемых классов в одно место делает код чрезмерно связанным.

Подробнее здесь: https://stackoverflow.com/questions/786 ... cluding-th
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C++»