Я пишу фабрику классов (в 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:
Все эти вещи скомпилированы в статическую библиотеку, которая связана с исполняемым файлом.
Задача ещё не решена.