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

标签 c++ templates stl

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

假设我有这样的东西:

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 有办法使它更整洁,但我猜 boost 可以 - 但是我们现在不使用 boost,无论如何我都很感兴趣。

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

最佳答案

这被称为类型删除,是一种相当常见的习惯用法 - 虽然您的映射当然可以由所有权强制指针组成,并且您也可以像大多数理智的人一样使用虚拟析构函数。

关于c++ - 具有不同模板参数的模板对象的集合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4753299/

相关文章:

c++ - 通过迭代写入 std::map 的元素

c++ - 为什么我可以在 main() 之前通过 std::map 填充变量?

c++ - 带有结构成员字符数组的 sscanf

c++ - 移动 Physics 对象以进行穿透的最小尺寸 Vec3 = 0

c++ - 在模板类实现中使用结构模板

具有灵活返回类型的 C++ 函数模板

c++ - 交换功能的好处?

c++ - 有没有更有效的方法来解决字谜问题

c++ - 如何以编程方式调用具有不同数据类型的 C++ 模板函数?

c++ - 无法分配列表迭代器 [C++]