我正在尝试使用STL将Qt应用程序移植到C ++。 C ++中QVariant
的等价物是什么? QVariant
可以存储任何数据类型 - 一个容纳异类的容器 - 不同类型的对象。但是,我必须将此应用程序移植到C ++。 C ++中QVariant
的等价物是什么?
答案 0 :(得分:13)
C ++中QVariant的等价物是什么?
C ++中的等价物称为 QVariant
。
实际上,这些天在STL中禁止隐含共享,所以这就是为什么你不会发现这样的副作用的另一个原因。
我建议您自己记下QVariant所需的功能,并判断是否真的值得删除QtCore。
这只是documentation的友情提醒:
QVariant类就像最常见的Qt数据类型的联合一样。
因为C ++禁止联合包含具有非默认构造函数或析构函数的类型,所以大多数有趣的Qt类不能在联合中使用。如果没有QVariant,这对于QObject :: property()和数据库工作等都是一个问题。
但是,由于允许使用带有构造函数和析构函数的C ++ 11类型。你有另外一个问题要问自己:
我是否想支持Qt所做的一切,或者我是否乐意至少要求C ++ 11?
公平地说,您还可以查看下面的以下提升变体,但最终在移植后最终使用boost而不是QtCore。
这是对自己的另一个判断。它们不是技术上的替代品,也不是兼容性。
在这种情况下,Boost是构建时依赖性,而QtCore是运行时。 Qt将保证在同一主要版本的生命周期内的二进制(和源)兼容性,而在QtCore这么长的时间内,boost可能不会做同样的事情。
无论哪种方式,这些选项都不是纯粹的STL
解决方案,在我认为你想要它的方式结束时。
答案 1 :(得分:3)
从C ++ 17开始,有std::any(可能包含任何类型的值)和std::variant(可能包含任何给定类型的值)。这些将在GCC 7,Clang 4.0和Visual C ++ 2017中开箱即用。
这些都不完全等效(例如,它们不支持转换内部值),但它们可以让您完成QVariant
所做的大部分操作。