【发布时间】:2014-12-02 04:35:31
【问题描述】:
是否可以使用QMap< QString, boost::multi_index_container<...> > 之类的结构?
一方面,我们有private:
BOOST_COPYABLE_AND_MOVABLE(multi_index_container)
在容器声明中。它应该告诉我们不要将 multi_index_container 放入其他类似 stl 的容器中。
另一方面,这样的构造
QMap< QString, boost::multi_index_container<...> > _map;
map.insert("bla-bla", container1);
...
auto tmp = _map.value(QString("bla-bla")).get<keyVal>();
//keyVal corresponds to one for the multi_index_container instance
使用 Visual Studio 2012 (+update4 + boost v1.55 + qt v4.8.5) 编译良好。
实验发现:
auto tmp = _map.value(QString("bla-bla")).get<keyVal>();
让tmp 处理已删除的数据。
而
auto tmp = _map.value(QString("bla-bla"));
auto tmp_1 = tmp.get<keyVal>();
给tmp_1留下有效数据。
如果我们需要将boost::multi_index_container<> 放在另一个容器中,有人知道如何正确处理它吗?
Qt5.3 有什么不同吗?
【问题讨论】:
-
“你在实验中发现”编译器会很乐意编译你的 [Undefined Behaviour]()。对于绝大多数此类情况,它们不需要发出诊断消息。
标签: qt boost move-semantics qt4.8 qt5.3