我想要一个 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::variant
或boost::any
关于以非专用模板作为值的 C++ hash_map,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15141269/