【问题标题】:Is there a QPair class, but for three+ items instead of two?是否有 QPair 类,但用于三个以上的项目而不是两个?
【发布时间】:2016-06-02 05:21:47
【问题描述】:

QPair 不错,但如果我需要 3 件物品怎么办?我应该只做一个结构,还是 Qt 涵盖了我?

【问题讨论】:

  • 你需要'Q'结构还是可以使用std::tuple
  • 我宁愿坚持Q,但这也是个好建议!
  • 结构有什么问题?
  • 这只是一个额外的步骤。
  • @Akiva - 实际上它会更短 - 一个你可以在任何地方直接使用的结构,而你每次想要使用它时都必须声明的元组,除非你 typedef 它,在这种情况下它会与结构相同。

标签: c++ qt struct


【解决方案1】:

您可以使用Qpair<Qpair<item1, item2>, item3> 创建自己的结构。上次我用这样的东西来实现你所说的。

请注意,要使所有操作正常工作,您需要覆盖它们。第一项是组合项(item1+item2 对)。

【讨论】:

  • 我在想那个,但它很乱。点赞但不被接受。
  • 实际上,这取决于。您只需覆盖item1item2 的操作,以确保以正确的方式进行比较。我是根据我的经验这么说的。
  • @SimplyMe 即使使用元组也被认为是混乱的(因为它试图隐藏需要新类型的事实)。所以你对元组的模仿,这是对类型的模仿,确实很混乱:)
  • 我知道,但这是一个很好的解决方法:)。您可以覆盖 2-3 个运算符,它实际上会以正常方式运行。
【解决方案2】:

正如QTBUG-22441 所指出的,开发人员无意添加std::tuple 的Qt 模拟。 (尽管QTBUG-3283 让我们希望它可以完成,但它的日期为 2009 年 12 月,而带有 WONTFIX 的较新报告的日期为 15 年 5 月)。因此,您需要退回到std::tuple 或提出您自己的数据结构。

Marc Mutz 的引述:

无论如何,假设的 QTuple 不会做任何不同的事情,除了消耗 Qt 开发人员资源。

此外,the docs for Qt 5 Algorithms module 明确声明以下内容:

从历史上看,Qt 曾经提供与许多 STL 算法函数直接等效的函数。从 Qt 5.0 开始,我们鼓励您直接使用 STL 中可用的实现;大多数 Qt 已被弃用(尽管它们仍可用于保持旧代码的编译)。

因此,官方鼓励在使用 Qt 5 进行编程时使用 STL,如果它成为必需品的话。

【讨论】:

  • 引用和链接只提到了STL算法,那么容器呢?
  • @Bernhard 见doc.qt.io/qt-5/containers.html。 Qt Containers 和 STL 容器之间有一个关键区别:Qt 实现了隐式共享和写时复制,而 STL 没有(我认为都是设计使然)。现在,当谈到 C++11 时,容器意味着移动语义,STL 和 Qt5 容器都实现了这一点。另外,看看这个答案:stackoverflow.com/a/1668549/342384
猜你喜欢
  • 2019-03-07
  • 2013-08-09
  • 1970-01-01
  • 2020-05-06
  • 1970-01-01
  • 2013-03-21
  • 2020-07-25
  • 2012-02-03
  • 2011-06-09
相关资源
最近更新 更多