5

我想保留某种类型的容器,其中类型映射到该类型的一个值。所以基本上我想要的是一个std::map<std::typeindex, T>T 取决于我索引它的类型。std::map这样做看起来不是一个好方法,因为类型是刚性的。我可以用来做这件事的最简单的解决方案是什么?

4

2 回答 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 回答