C++中的QVariant相当于什么?

dex*_*ous 4 c++ qt stl qvariant qtcore

我试图使用STL将Qt应用程序移植到C++.什么是QVariantC++中的等价物?QVariant可以存储任何数据类型 - 一个容纳异类的容器 - 不同类型的对象.但是,我必须将此应用程序移植到C++.什么是QVariantC++中的等价物?

lpa*_*app 13

C++中的QVariant相当于什么?

调用C++中的等价物QVariant.

除了半开玩笑,它可能是最接近联盟的,但QVariant远不止于此; 元类型,CoW等

实际上,这些天来STL中禁止隐含共享,所以这就是为什么你不会发现这样的副作用的另一个原因.

我建议您自己记下QVariant所需的功能,并判断是否真的值得丢弃QtCore.

这只是文档中的友好提醒:

QVariant类就像最常见的Qt数据类型的联合一样.

因为C++禁止联合包含具有非默认构造函数或析构函数的类型,所以大多数有趣的Qt类不能在联合中使用.如果没有QVariant,这对QObject :: property()和数据库工作等都是一个问题.

但是,由于允许使用带有构造函数和析构函数的C++ 11类型.你在这里有另一个问题要问自己:

我是否想支持Qt所做的一切,或者我是否乐意至少要求C++ 11?

说句公道话,你也可以看看下面的升压变体的下方,但随后你最终使用升压而不是QtCore移植后.

这是对自己的另一种判断.它们不是技术上的替代品,也不是兼容性的替代品.

在这种情况下,Boost是构建时依赖性,而QtCore是运行时.Qt将保证在同一主要版本的生命周期中的二进制(和源)兼容性,而在QtCore这么长的时间内,boost可能不会做同样的事情.

无论哪种方式,这些选项都不是STL我认为你想要它的方式的最终解决方案.


Leo*_*ans 7

从 C++17 开始,有std::any(可能包含任何可复制类型的值)和std::variant(可能包含任何给定类型的值)。这些将在 GCC 7、Clang 4.0 和 Visual C++ 2017 中得到支持。

这两个都不是完全等效的(例如,它们不支持转换内部值),但它们将允许您执行大部分QVariant操作。