Как сделать Я делаю заголовок Factory не зависимым от шаблонных объектов, которые он создает?

У меня есть абстрактный базовый класс вроде этого:

class AbstractBaseClass
{}; 

шаблонный конкретный класс, производный от него:

template<class T>
class ConcreteClass : public AbstractBaseClass
{
public:
   ConcreteClass(T input) : data(input) {}
private:
    T data;
};

И у меня есть фабричный класс, который создает AbstractBaseClasses

class MyFactory
{
public:
   boost::shared_ptr<AbstractBaseClass> CreateBlah();
   boost::shared_ptr<AbstractBaseClass> CreateFoo();

   template<class T>
   boost::shared_ptr<AbstractBaseClass> Create(T input)
   {
      return boost::shared_ptr<AbstractBaseClass>(new ConcreteClass<T>(input));
   }
};

Проблема в том, что теперь ВСЕ который использует MyFactory, должен включать всю реализацию ConcreteClass. В идеале я хочу, чтобы о ConcreteClass знали только MyFactory.

Есть ли способ спроектировать это для достижения этой цели? (Помимо ручного создания новой функции Create в MyFactory для каждого типа, который мне нужен, вместо его создания по шаблону).

5
задан justin 9 November 2011 в 07:51
поделиться