Moi*_*oia 4 c++ qt qvariant c++14
让我们考虑这个例子:
QVariant v1(1);
QVariant v2("goofy");
QVariantList list;
list << v1 << v2;
for (const auto& var : list) {
qdebug() << var;
// nasty part
if (var.type == QVariant::Int) {
int value = var.toInt();
// do something
} else if (var.type == QVariant::QString) {
QString value = var.toString();
// do something
}
}
Run Code Online (Sandbox Code Playgroud)
调试函数显示QVariant的内部存储类型:
QVariant(int, 1) QVariant(QString, "goofy")
Run Code Online (Sandbox Code Playgroud)
有没有办法避免ifs 并进行显式转换以访问内部类型?更具体地说,为了获得价值,我希望能够编写如下内容:
auto value = var.ToData();
Run Code Online (Sandbox Code Playgroud)
编辑:由于 QVariant 可以容纳很多类型,您甚至可以在其上添加自定义类型,将问题仅限于基本类型(int、double、bool、string)就足够了
不,这是不可能的。与任何其他变体一样,QVariant基本上充当联合。除非你知道数据的类型,否则你无法得到它。如果您的想象代码auto value = var.ToData();应该可以工作,那么类型value必须在编译时可解析 - 但它根本就不是变体。
变体的全部意义在于它使您能够在单个值中存储多种类型,所有这些都在运行时完成。在内部,它存储它的值的类型,但它是一个运行时值——所以如果你不知道确切的类型,除了进行长时间的切换之外别无他法。
| 归档时间: |
|
| 查看次数: |
1123 次 |
| 最近记录: |