具有不同模板参数的模板对象的集合

时间:2011-01-20 22:17:33

标签: c++ templates stl

作为一种工厂方法设置,我想注册仿函数,每个仿函数创建不同类型的对象,但遇到一个公共接口 - 即所有创建对象都是子类化核心类。

说我有类似的东西:

template <class T> struct FactoryMethod
{
 X* create();
}

我不能拥有(IIRC)std::map<std::string,FactoryMethod*>,因为每个FactoryMethod模板专精都是一个单独的类型。但我可以做:

struct IFactoryMethod
{
 virtual X* create()=0;
};
template <class T> struct FactoryMethod : public IFactoryMethod
{
 virtual X* create();
};
std::map<std::string,IFactoryMethod*> factories;

右?我不知道标准的STL有办法使这个更整洁,虽然我猜想提升 - 但是我们现在不使用提升而且我还是感兴趣。

然后可以根据类型名称(例如从XML读取)查找factories以创建正确的类型。

1 个答案:

答案 0 :(得分:1)

这被称为类型擦除,并且是一种相当常见的习惯用法 - 虽然你的地图当然可以由所有权执行指针构成,你也可以像大多数理智的人一样使用虚拟析构函数。