我想保留某种类型的容器,其中类型映射到该类型的一个值。所以基本上我想要的是一个std::map<std::typeindex, T>
T 取决于我索引它的类型。std::map
这样做看起来不是一个好方法,因为类型是刚性的。我可以用来做这件事的最简单的解决方案是什么?
问问题
117 次
2 回答
4
如果你映射到一个类型擦除的容器boost::any
,如果你知道它是什么,你至少可以恢复类型:
std::map<std::typeindex, boost::any> m;
m[typeid(Foo)] = Foo(1, true, 'x');
Foo & x = boost::any_cast<Foo&>(m[typeid(Foo)]);
于 2013-10-06T19:23:54.590 回答
2
您可以使用shared_ptr<void>
:
std::map<std::typeindex, std::shared_ptr<void>> m;
m[typeid(T)] = std::make_shared<T>(...);
auto pT = std::static_pointer_cast<T>(m[typeid(T)]); // pT is std::shared_ptr<T>
或者当然你会添加一些包装器来确保T
每行的两个 s 匹配并且你不会意外访问一个空的shared_ptr<void>
.
于 2013-10-06T19:27:54.623 回答