以非专用模板作为值的 C++ hash_map

标签 c++ templates hashmap

我想要一个 std::hash_map 将(例如)常规 std:string 映射到 多个不同的特化另一个模板类。

这个例子是我想要实现的(虽然它是错误的并且无法编译):

template<typename T>
class Foo {
public:
  Foo(T _value)
  {
    this-> value = _value;
  }

private:
  T value;
};

int main() 
{
  hash_map<string, Foo> various_foos;
  various_foos["foo"] = Foo<int>(17);
  various_foos["bar"] = Foo<double>(17.4);
}

最佳答案

map只能存储单一的值类型,所以不能直接存储不同类型的对象;类模板的不同特化是不同的类型。

常见的解决方案是:

  • 存储指向多态基类型的指针,并通过虚函数或 RTTI 访问真实类型。您需要谨慎管理对象本身 - 要么存储智能指针,要么将它们保存在其他数据结构中。
  • 存储可区分的 union 类型,例如 boost::variantboost::any

关于以非专用模板作为值的 C++ hash_map,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15141269/

相关文章:

java - 按映射中的特定键对 List<Map<String, Object>> 进行排序

java - 如何高效地取HashMap数组中多个HashMap的值的平均值?

c++ - 为什么 LD_PRELOAD 不适用于加载的共享库之一?

c++ - 为什么我必须按 Enter 两次?

c++ - 如何使用模板实现minheap

c++ - 模板参数依赖范围查找

java - getValue 返回列表的反向映射

c# - shell 扩展如何将多个选定的文件传递给我自己的程序?

c++ - SDL2函数绘制实心圆

c++ - 将仅包含 C++ header 的模板编译为共享库