Я безуспешно пытаюсь инициализировать статический объект. Цель состоит в том, чтобы автоматически зарегистрировать фабричный класс в репозитории (который является синглтоном).
Я уже рассмотрел: Как принудительно инициализировать статический член?
В одном из комментариев говорится, что (также есть пример, которому я следовал):
Я прочитал это в стандарте С++ (14.7.1): Если член шаблона класса или шаблона члена не был создан явно или явно специализирован, специализация члена создается неявно, когда на специализацию ссылаются в контексте, который требует существования определения члена; в частности, инициализация (и любые связанные с ней побочные эффекты) статического члена данных не происходит, если сам статический член данных не используется таким образом, который требует существования определения статического члена данных.
Итак, я пытаюсь сделать что-то подобное, но мне не удается принудительно инициализировать объект. Вот код. Я не знаю, что мне не хватает. Это шаблон, который я использую.
namespace my_lib
{
template
struct FactoryHelper
{
FactoryHelper ();
static FactoryHelper _helper;
};
}
А это макрос, который пользователь библиотеки будет использовать для определения фабричного класса и одновременной регистрации объекта в репозитории:
#define CREATE_FACTORY(ClassName)\
namespace my_lib\
{\
class ClassName##Factory;\
template<> FactoryHelper::FactoryHelper () { std::cout << "object initialized!" << std::endl; }\
template<> FactoryHelper FactoryHelper::_helper;\
struct ClassName##Factory : public FactoryBase {\
...\
};\
}
Предыдущий код определен в заголовочном файле (Factory. час).
В файле .cpp (Example.cpp) у меня есть:
CREATE_FACTORY(UnitTestExample)
...
При выполнении программы я не вижу сообщение, которое печатает конструктор при его вызове. Любая помощь более чем приветствуется.
Заранее спасибо.