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

C++ 具有不同模板参数的模板对象的集合,c++,templates,stl,C++,Templates,Stl,作为一种工厂方法设置,我想注册函子,每个函子创建不同类型的对象,但满足一个公共接口,即所有创建对象子类化一个核心类 假设我有这样的东西: template <class T> struct FactoryMethod { X* create(); } 对吧??我不知道标准STL有办法使这个更整洁,虽然我想boost有办法,但是我们现在不使用boost,我还是感兴趣的 这样就可以根据类型名(例如从XML读取)查找工厂创建正确的类型。这被称为类型擦除,是一个相当常见的习惯用法-尽管你

作为一种工厂方法设置,我想注册函子,每个函子创建不同类型的对象,但满足一个公共接口,即所有创建对象子类化一个核心类

假设我有这样的东西:

template <class T> struct FactoryMethod
{
 X* create();
}
对吧??我不知道标准STL有办法使这个更整洁,虽然我想boost有办法,但是我们现在不使用boost,我还是感兴趣的


这样就可以根据类型名(例如从XML读取)查找工厂创建正确的类型。

这被称为类型擦除,是一个相当常见的习惯用法-尽管你的地图当然可以由所有权强制指针组成,你也可以像大多数正常人一样使用虚拟析构函数。

这是伪代码,让我休息一下!虽然你能澄清一下“所有权强制指针”吗?他基本上是告诉你不要使用原始指针,相反,你可以使用共享的或唯一的指针,这使得使用指针更加安全。它们来自boost,您也可以在std::tr1或c++0x中的std中找到它们。你可以在这里看一看:不,他们足够聪明,可以使用替代品,这些替代品远远优于:PI从未找到“最佳”智能ptr,他们似乎都有警告。我很少看到有经验的C++人会犯一些基本的指针错误。
struct IFactoryMethod
{
 virtual X* create()=0;
};
template <class T> struct FactoryMethod : public IFactoryMethod
{
 virtual X* create();
};
std::map<std::string,IFactoryMethod*> factories;