当您拥有结构名称和字段值列表时,是不是可以以编程方式创建结构对象并填充字段

Posted

技术标签:

【中文标题】当您拥有结构名称和字段值列表时,是不是可以以编程方式创建结构对象并填充字段【英文标题】:Is it possible to programmatically create objects of structs and fill the fields, when you have a list of struct names and field values当您拥有结构名称和字段值列表时,是否可以以编程方式创建结构对象并填充字段 【发布时间】:2016-04-27 11:26:31 【问题描述】:

当您拥有结构名称和字段值的列表时,是否可以以编程方式创建结构对象并填充字段? 假设我必须从(JSON)文件中读取条目并填写我的结构。我有值结构名称和值,但我想编码这样代码将循环所有结构并填充内存数据。可能听起来很奇怪,但有什么办法吗?

【问题讨论】:

你不能用struct 来做,但是你可以使用用户定义的类型来创建这样的数据结构。有很多 json 库可以为您执行此操作。 【参考方案1】:

不。您正在寻找的语言功能称为 reflection,而 C++ 没有。

您可以建立一个std::map<std::string, SomeType> 来代替吗?如果SomeType 因字段而异,boost::variant 将允许您在任何给定时间存储多种类型中的任何一种(它基本上是一个标记的联合)。

或者你可以切换到 Python。 :)

【讨论】:

不能使用可变参数模板吗?我们的库使用非常有限,我们使用的是 C++11 编译器 没有。可变参数模板是一种编译时构造,允许您使用可变数量的模板参数创建类/函数模板。

以上是关于当您拥有结构名称和字段值列表时,是不是可以以编程方式创建结构对象并填充字段的主要内容,如果未能解决你的问题,请参考以下文章

无法以一对一关系更新拥有方的属性

如何设置动态下拉列表的选定值

List.JS - 使用逗号分隔值过滤

使用反射设置 C# 结构/类字段时是不是可以避免装箱?

有没有办法以编程方式为 iOS 上的 3rd 方应用程序获取 UI 层次结构?

当您在循环中迭代数组时,如何知道数组中是否不存在更多值