ZBLOG

14.2.2.13. Managing Complex Types Data Some DynamicData instances manage complex types that cannot be directly modified with the primitive getters and setters. Dynamic Language Binding provides two possible approaches for managing complex data ty...

14.2.2.13. 管理复杂类型数据

在某些情况下,DynamicData 实例管理的复杂类型不能直接通过基本的获取和设置方法进行修改。动态语言绑定提供了两种可能的方法来管理复杂数据类型:

  1. DynamicData::get_complex_value 和 DynamicData::set_complex_value

    • 这些 API 允许获取或设置通用的 DynamicData。与下一种方法的主要区别在于,此 API 始终会执行数据复制。
  2. DynamicData::loan_value

    • 此 API 允许借用对 DynamicData 的引用,以便处理时防止数据复制。在处理完毕后,必须调用 DynamicData::return_loaned_value 来返回借用的数据。如果对已经被借用的值再次调用 DynamicData::loan_value 将会失败。

以下代码片段展示了如何使用与结构体类型定义相同的结构来管理复杂数据:

// 基于结构类型创建动态数据
DynamicData::_ref_type data {DynamicDataFactory::get_instance()->create_data(complexstruct_type)};

// 使用复杂 API(复制)
DynamicData::_ref_type complex_data;
data->get_complex_value(complex_data, data->get_member_id_by_name("complex_member"));
// 设置数据
int32_t in_value {10};
complex_data->set_int32_value(complex_data->get_member_id_by_name("first"), in_value);
data->set_complex_value(data->get_member_id_by_name("complex_member"), complex_data);

// 借用 API
DynamicData::_ref_type loan_data = data->loan_value(data->get_member_id_by_name("complex_member"));
loan_data->set_int32_value(loan_data->get_member_id_by_name("first"), in_value);
int32_t out_value;
loan_data->get_int32_value(out_value, loan_data->get_member_id_by_name("first"));
data->return_loaned_value(loan_data);

解释

  • 在上述代码中,首先通过工厂创建了一个基于某个复合结构类型 (complexstruct_type) 的动态数据实例。

  • 使用 get_complex_value 方法获取名为 "complex_member" 的复合数据,并存储到 complex_data 中。这一过程涉及到复制,因为它是通过简单的 getter 方法实现的。

  • 然后,我们设置这个复杂成员中的第一个整型值为 10

  • 接着,通过 set_complex_value 将更新后的复合数据存回主动态数据中。

  • 对于贷款API部分,通过调用 loan_value() 借用了 "complex_member" 的值,这样可以避免不必要的数据复制。在这里,修改了第一项整数值并读取该值,然后最后调用 return_loaned_value() 来归还借出的值。

这种方法使得我们能够高效地操作复杂数据类型,同时避免了频繁的数据复制,提高了性能。


内容由零声教学AI助手提供,问题来源于学员提问

本站部分文章来源于网络,版权归原作者所有,如有侵权请联系站长删除。
转载请注明出处:https://golang.0voice.com/?id=21828

分享:
扫描分享到社交APP
上一篇
下一篇
发表列表
游客 游客
此处应有掌声~
评论列表

还没有评论,快来说点什么吧~

联系我们

在线咨询: 点击这里给我发消息

微信号:3007537140

上班时间: 10:30-22:30

关注我们
x

注册

已经有帐号?