пытаюсь принудительно инициализировать статический объект

Я безуспешно пытаюсь инициализировать статический объект. Цель состоит в том, чтобы автоматически зарегистрировать фабричный класс в репозитории (который является синглтоном).

Я уже рассмотрел: Как принудительно инициализировать статический член?

В одном из комментариев говорится, что (также есть пример, которому я следовал):

Я прочитал это в стандарте С++ (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)
...

При выполнении программы я не вижу сообщение, которое печатает конструктор при его вызове. Любая помощь более чем приветствуется.

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

7
задан Community 23 May 2017 в 12:06
поделиться