Инициализация статического объекта в Windows (для фабрики классов)

Я пишу фабрику классов (в Visual Studio 2008), где классы регистрируются сами. Фабрика классов является одноэлементной, и классы регистрируют себя следующим образом:

в Factory.h

class Factory {...};

template<typename T>
class Register
{
public: 
    Register()
    {
        Factory::instance().register<T>();
    }
};

в SomeRegisteredClass.cpp

#include <Factory.h>

class SomeRegisteredClass : public ISomeInterface
{
};

static Register<SomeRegisteredClass> register;

Однако во время выполнения конструктор Register никогда не вызывается и, следовательно, SomeClass никогда не регистрируется. Я подозреваю, что происходит некоторая оптимизация, которая оптимизирует содержимое SomeRegisteredClass.cpp (поскольку SomeClass не используется нигде в коде напрямую, а только через его интерфейс). Может ли это быть и как я могу отключить это.

Edit1: все эти вещи скомпилированы в статическую библиотеку, которая связана с исполняемым файлом.

0 ответов

Другие вопросы по тегам