我有一个模板类"Factory“。工厂的原型如下所示:
template <class T>
class Factory
{
public:
Factory();
~Factory();
//few more functions & data-members
private:
//few more functions & data-members
};在main()中,我创建了多种类型的工厂,如--
int main()
{
typedef Factory<int> IntFactory ;
IntFactory A = IntFactory();
typedef Factory<float> FloatFactory ;
FloatFactory B = FloatFactory();
//Complex is some user defined class
typedef Factory<Complex> ComplexFactory ;
ComplexFactory C = ComplexFactory();
//Point3D is a user defined class
typedef Factory<Point3D> Point3DFactory ;
Point3DFactory D = Point3DFactory();
//I may have several such initializations.
}问题是,如果我想遍历对象A,B,C,D,我该如何创建它们的数组?
发布于 2012-09-28 21:52:42
我认为你能做的最好的事情,(在我的脑海中没有经过测试)是:
class FactoryBase
{
public:
virtual ~FactoryBase() = 0;
};
template <class T>
class Factory : public FactoryBase
{
//...
};
int main()
{
std::vector<FactoryBase*> factories;
factories.push_back(new Factory<int>);
factories.push_back(new Factory<Complex>);
//... Make sure you delete these. Better yet, use a smart pointer.
return 0;
}注意指针的vector,所有的push_back(new ...)内容都非常容易受到异常和泄漏的影响……
发布于 2012-09-28 21:55:34
(如果您不想使用基类方法,也可以选择)
typedef boost::variant<IntFactory, FloatFactory, ...> FactoryType;
std::vector<FactoryType> vFactories;然后使用访问器执行和方法...
链接variant的文档。
发布于 2012-09-29 00:18:55
有很多方法可以做你想做的.每一个都有利弊...如果您知道编译时的所有实例,这种方法可以很好地工作:
包括
#include <boost/fusion/algorithm/iteration/for_each.hpp>
#include <boost/fusion/container/vector.hpp>函数器
struct do_whatever
{
template<typename T>
void operator()(T& t) const
{
...
}
};向量上的实例化和迭代
boost::fusion::vector<IntFactory, FloatFactory, ComplexFactory, Point3DFactory> vv(A, B, C, D);
boost::fusion::for_each(vv, do_whatever());https://stackoverflow.com/questions/12641207
复制相似问题