我希望有一个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);
}
答案 0 :(得分:9)
地图只能存储单个值类型,因此不能直接存储不同类型的对象;并且类模板的不同特化是不同的类型。
常见的解决方案是:
boost::variant
或boost::any
答案 1 :(得分:2)
您通常不能在哈希中使用不完整类型的元素。你能创建一个其他人可以继承的非模板基类吗?
其原因很大程度上归结为编译器将如何解释您的请求。如果无法计算Foo
结构的大小,则无法为hash_map
创建内部。