gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:10:46 25 4
gpt4 key购买 nike

我想要一个 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com