c++ - 调用 QVariant::toMap() 时如何避免创建副本?
问题描述
我将 QVariantMap 作为 QVariant 存储在另一个 QVariant 中。我需要在插槽函数中的这个嵌套的 QVariantMap 中添加文件。这是我到目前为止所拥有的:-
QVariantMap map = data["nestedMap"].toMap(); //first copy
map[newfield] = assingCoolStuff(); //add new filed to nestedMap
data["nestedMap"] = map; // second copy ?
如果我是正确的,那么它会两次创建 nestedMap 副本并且运行速度会很慢。有没有办法优化这个?
解决方案
template<class T>
T* cast(QVariant& variant)
{
if (variant.userType() == qMetaTypeId<T>())
return reinterpret_cast<T*>(variant.data());
return 0;
}
QVariantMap &map = *cast<QVariantMap>(data["nestedMap"]);
map[newfield] = assingCoolStuff();
如果data["nestedMap"]
可能不包含QVariantMap
,则需要更改代码。
推荐阅读
- python - 如何正确使用 Tkinter 进行 OPEN 和 SAVE 功能?
- sql - 根据插入结果设置 Postgresql 变量以供将来使用
- node.js - 所有猫鼬模式中的预中间件
- python - 在 Python(Kivy) 中每 5 秒安排一次作业
- git - 从 git 中删除文件,但将其保存在本地 git pull 上?
- regex - 仅在正则表达式中获取组
- jenkins - Jenkins - 节流构建以在每个可用节点上运行一个作业
- docker - 如何通过 Helm 在 Kubernetes CI/CD 中使用 Azure Devops 发布管道变量?
- highcharts - Highmaps 不会显示我的 GeoJSON 湖层
- kubernetes - Kubernetes。我可以从其他 POD 执行 POD 中的任务吗?