У меня есть азбука с несколькими производными классами. Для создания этих производных классов я использую шаблон фабрики:
.h файл:
class derivedFactory
{
public:
base* createInstance();
};
.cpp файл:
base* derivedFactory::createInstance()
{
return new derived();
}
Есть ли какое-то преимущество перед простой функцией:
.h файл:
base* derivedFactoryFunction();
.cpp файл:
base* derivedFactoryFunction()
{
return new derived();
}
Также: я использую абстрактный шаблон фабрики для внедрения зависимостей. Я мог бы использовать иерархию наследования, основанную на ABC:
class objectCreator
{
public:
base* create() = 0;
};
Есть ли преимущество в использовании этого по сравнению с указателем на функцию:
boost::function<base* ()> factory_ptr;
Используя boost :: bind / lambda, это, кажется, делает мой код более компонуемым, и, если я хочу, я могу обернуть в него настоящий фабричный объект. Я вижу, что может быть небольшое снижение производительности, но об этом стоит беспокоиться, так как он вызывается только во время запуска.