Принудительная инициализация статического члена класса, даже если он явно не включен ни в один файл - PullRequest
0 голосов
/ 22 января 2019

У меня есть базовый класс:

template <typename T>
class Base
{
    public:
        struct RegisterType {
            RegisterType() { RegisterHelper::get().registerType<T>();}
        };

        static RegisterType s_register;
};

template <typename T>
typename Base<T>::RegisterType Base<T>::s_register __attribute__((used));

и производный класс:

class Derived : public Base<Derived>
{
    public:
        constexpr static const char *const propertyA = "propertyA";
        ...
}

Производные типы должны быть зарегистрированы, чтобы сопоставить некоторые свойства с идентификатором производного типа и,поэтому сделайте загрузчик данных чище.Однако я не хочу явно регистрировать их во внешнем классе, поэтому моя цель состоит в том, чтобы регистрация производного типа находилась внутри определения производного типа.

Проблема, которую я обнаружил, состоит в том, что существуют некоторые производные классы, которые не используются в коде проекта, и, как следствие, эти производные классы не регистрируются, что приводит к неполному окончательному результату в загрузчике.Это исправлено, если я явно включаю рассматриваемый тип Derived (т. Е. DerivedOne), например: '#include "DerivedOne.h"'

Есть ли способ принудительно инициализировать его без необходимости явно включать все производныезанятия?

Заранее спасибо

...