我正在尝试找出解决以下问题的方法(精简版的实际代码,对于明显的内存泄漏感到抱歉):
#include <iostream>
namespace A {
struct Product {
virtual void doSomething() const =0;
};
template<typename T>
struct SpecialProduct : public Product {
T t;
SpecialProduct(T t) : t(t) {};
virtual void doSomething() const { std::cout << "A: " << t << " does something\n"; }
};
struct Factory {
template<typename T>
Product* create(T t = T()) const { return new SpecialProduct<T>(t); }
};
}
namespace B {
struct Product {
virtual void doSomething() const =0;
};
template<typename T>
struct SpecialProduct : public Product {
T t;
SpecialProduct(T t) : t(t) {};
virtual void doSomething() const { std::cout << "B: " << t << " does something\n"; }
};
struct Factory {
template<typename T>
Product* create(T t = T()) const { return new SpecialProduct<T>(t); }
};
}
struct ProductType { };
template<typename T>
struct SpecialProductType : public ProductType {};
int main() {
// I have a factory of a known type
A::Factory f;
// standard procedure
A::Product* p = f.create<int>();
p->doSomething();
// I have a product type description from some source
ProductType* t = /* some source */ 0;
// How do i get a product instance of type t from f?
// A::Product* p = f. ???
}
我有一个模块的多个实现,在这种情况下在不同的命名空间中。工厂模式用于处理变体。每个模块都提供(抽象)产品和专门的通用版本。产品类型使用遵循相同模式的统一类基础结构表示。
我的问题是:给定一个指向专用产品类型的指针,我如何实现一个函数,从给定的工厂对象生成相应专用产品的实例?
非常感谢您的任何建议。