【发布时间】:2013-08-28 14:33:16
【问题描述】:
我有一组大约 150 个变量,它们可以有不同的类型(双精度、布尔值、数组)。我需要将这组变量打包到 QVector 中。由于类型变量不同,我想到了使用 QVariant。到目前为止,这是我的设计。我不确定的是 myVariables 的性能 + 搜索机制。
enum class VariableEnums{
VAR1,
VAR2,
VAR3
};
struct myVariable{
VariableEnums var;
QVariant value;
};
QVector<myVariable> myVariables;
这个想法是 myVariables 将被发送到几个模块。每个模块都会找到一个特定的变量并更新一些其他变量。因此,一个模块可以更新将由另一个模块使用的变量。到目前为止,关于搜索特定变量,我只能想到以下几点:
foreach(myVariable *myVar, myVariables{
if(myVar->var == VariableEnums::VAR1){
//......
continue;
}
}
有没有更有效的方法来做到这一点?我可以使用 indexOf,但我不确定如何将它与结构一起使用。
谢谢, 米。
【问题讨论】:
-
您必须对其进行分析。这样,您将了解此选择在您的系统上的性能。是否也是构造
QVector<bool>、QVector<double>、...并根据需要传递它们的选项。您的代码似乎患有健忘症,因为您知道类型然后忘记了它。 -
您是否将不同的类型与 VAR1 到 VAR3 中的每一个相关联?如果是这样,为什么不简单地保留三个单独的值列表并且只对特定类别中的值起作用?这不仅可以避免您搜索异构容器,还可以消除 QVariant 的运行时开销。当然,除非你绝对需要一个异构容器。