yaml对象数组类型XmlRpc::XmlRpcValue严格限定数据类型

YAML(yml)仍是一种标记语言 目录 基本语法 数据类型 YAML 对象 YAML 数组 复合结构 纯量 引用 YAML 是 "YAML Ain't a Markup Language"(YAML 不是一种标记语言)的递归缩写。在开发的这种语言时,YAML 的意思其实是:"Yet Another Markup Language"(仍是一种标记语言)。 YAML 的语法和其他高级语言类似,并且可以简单表达清单、散列表,标量等数据形态。它使用空白符号缩进和大量依赖外观的特色,特别适合用来表达或编辑数据结构、各种配置文件、倾印 阅读详情

yaml支持对象数组类型,格式如下:

ob_extracts:
- type: ["charg","charging","pile","cdz"]
  intensity_thr:
    front_laser: 150.       #包括360
    rear_laser: 150.
  pts_num: 20
- type: ["contain","container","huogui"]
  intensity_thr:
    front_laser: 150.
    rear_laser: 150.
  pts_num: 20

头文件在/opt/ros/kinetic/include/xmlrpcpp/XmlRpcValue.h,构造函数如下:


namespace XmlRpc {

  //! RPC method arguments and results are represented by Values
  //   should probably refcount them...
  class XMLRPCPP_DECL XmlRpcValue {
  public:


    enum Type {
      TypeInvalid,
      TypeBoolean,
      TypeInt,
      TypeDouble,
      TypeString,
      TypeDateTime,
      TypeBase64,
      TypeArray,
      TypeStruct
    };

    // Non-primitive types
    typedef std::vector<char> BinaryData;
    typedef std::vector<XmlRpcValue> ValueArray;
    typedef std::map<std::string, XmlRpcValue> ValueStruct;
    typedef ValueStruct::iterator iterator;
    typedef ValueStruct::const_iterator const_iterator;

    //! Constructors
    XmlRpcValue() : _type(TypeInvalid) { _value.asBinary = 0; }
    XmlRpcValue(bool value) : _type(TypeBoolean) { _value.asBool = value; }
    XmlRpcValue(int value)  : _type(TypeInt) { _value.asInt = value; }
    XmlRpcValue(double value)  : _type(TypeDouble) { _value.asDouble = value; }

    XmlRpcValue(std::string const& value) : _type(TypeString) 
    { _value.asString = new std::string(value); }

    XmlRpcValue(const char* value)  : _type(TypeString)
    { _value.asString = new std::string(value); }

    XmlRpcValue(struct tm* value)  : _type(TypeDateTime) 
    { _value.asTime = new struct tm(*value); }


    XmlRpcValue(void* value, int nBytes)  : _type(TypeBase64)
    {
      _value.asBinary = new BinaryData((char*)value, ((char*)value)+nBytes);
    }

    //! Construct from xml, beginning at *offset chars into the string, updates offset
    XmlRpcValue(std::string const& xml, int* offset) : _type(TypeInvalid)
    { if ( ! fromXml(xml,offset)) _type = TypeInvalid; }

    //! Copy
    XmlRpcValue(XmlRpcValue const& rhs) : _type(TypeInvalid) { *this = rhs; }

XmlRpc::XmlRpcValue类型的内置类型包含有std::vector<char>字符串、std::vector<XmlRpcValue>对象数组、std::map<std::string,XmlRpcValue>对象map、TypeInvalid类型的空、bool、int、double、std::string、const char*、tm时间以及指针+偏移的二进制数组TypeBase64类型,另外还有xml文件+偏移的二进制类型,支持拷贝构造。

同时提供了赋值运算符函数:

// Operators
    XmlRpcValue& operator=(XmlRpcValue const& rhs);
    XmlRpcValue& operator=(bool const& rhs) { return operator=(XmlRpcValue(rhs)); }
    XmlRpcValue& operator=(int const& rhs) { return operator=(XmlRpcValue(rhs)); }
    XmlRpcValue& operator=(double const& rhs) { return operator=(XmlRpcValue(rhs)); }
    XmlRpcValue& operator=(const char* rhs) { return operator=(XmlRpcValue(std::string(rhs))); }

支持XmlRpcValue对象、bool、int、double、char*类型的赋值

解码数据提供了若干类型运算符函数:

operator bool&()          { assertTypeOrInvalid(TypeBoolean); return _value.asBool; }
    operator int&()           { assertTypeOrInvalid(TypeInt); return _value.asInt; }
    operator double&()        { assertTypeOrInvalid(TypeDouble); return _value.asDouble; }
    operator std::string&()   { assertTypeOrInvalid(TypeString); return *_value.asString; }
    operator BinaryData&()    { assertTypeOrInvalid(TypeBase64); return *_value.asBinary; }
    operator struct tm&()     { assertTypeOrInvalid(TypeDateTime); return *_value.asTime; }

    XmlRpcValue const& operator[](int i) const { assertArray(i+1); return _value.asArray->at(i); }
    XmlRpcValue& operator[](int i)             { assertArray(i+1); return _value.asArray->at(i); }

    XmlRpcValue& operator[](std::string const& k) const { assertStruct(); return (*_value.asStruct)[k]; }
    XmlRpcValue& operator[](std::string const& k) { assertStruct(); return (*_value.asStruct)[k]; }
    XmlRpcValue& operator[](const char* k) const { assertStruct(); std::string s(k); return (*_value.asStruct)[s]; }
    XmlRpcValue& operator[](const char* k) { assertStruct(); std::string s(k); return (*_value.asStruct)[s]; }

严格限定类型,比如解码int数据不能使用double,否则会触发assertTypeOrInvalid(TypeDouble);的类型检查异常。示例:

XmlRpc::XmlRpcValue extract_params;
        _nh.getParam("ob_extracts",extract_params);
        cout<<typeid( extract_params[0]["len"]["min"] ).name()<<endl;
        cout<<"TTTest obj in dict, "<<extract_params[0]["len"]["min"]<<endl;
        cout<<"     : "<<double(extract_params[0]["len"]["min"])<<endl;
        cout<<"     : "<<int(extract_params[0]["intensity_thr"]["front_laser"])<<endl;

这里将std::map<std::string,XmlRpcValue>类型唤作ValueStruct,使用[ ]运算符传入键名返回XmlRpcValue对象,可以嵌套,可以数组

此处map是非哈希的树形有序map,还提供了begin()、end()的广度迭代器。

iterator begin() {assertStruct(); return (*_value.asStruct).begin(); }
    iterator end() {assertStruct(); return (*_value.asStruct).end(); }

    const_iterator begin() const {assertStruct(); return (*_value.asStruct).begin(); }
    const_iterator end() const {assertStruct(); return (*_value.asStruct).end(); }

还提供了提取类型和string、二进制数组base64、数组array和struct值size的函数:

//! Return the type of the value stored. \see Type.
    Type const &getType() const { return _type; }

    //! Return the size for string, base64, array, and struct values.
    int size() const;

【ROS2】从yaml文件中读取参数配置 ROS2:从yaml中读取参数,到节点;使用C++演示参数的增、删、改、查、遍历、监听变化 阅读详情

相关推荐

超详细!思岚S2激光雷达hector_mapping建图

使用思岚S2激光雷达,在ros平台上利用hector_mapping功能包实现建图功能

m0_50965539的博客 5591

xmlrpc笔记

类的结构图如下: 数据发送类 XmlRpcDispatch client,server都用使用此类发送数据。 客户端 XmlRpcClient 构造函数为:  XmlRpcClient(const char* host, int port, const char* uri=0);//参数1为IP,参数2为端口。 execute():  bool execute(const char

evsqiezi 1778

某教育平台线上用户流失分析

本项目基于某教育平台的用户登录信息、用户个人信息以及用户课程学习记录三信息表,挖掘了平台流量以及用户流失等信息。使用python对数据进行预处理,使用tableau进行数据可视化分析。该教育平台正值窗口期,平台流量没有良好的留存水平,但有良好的发展趋势,需要深入分析用户留存率低,做好招新促活营销。该教育平台的基本盘在广东、湖北、河南、贵州等省份,线上教育的潜在用户可能更多分布在线下教育资源不充足、受疫情影响更为严重的地区。

fhy12的博客 1300

XMLRPC++学习笔记

1   参数类型 XmlRpcValue    标量数据类型(scalar )  参数值可以是标量,用类型标签将值包括起来。如果没指定类型,则认为是string类型。   或者 表示 4字节带符号整数值       表示 0 (false) or 1 (true)       表示     字符串       表示     双精度带符号浮点值       表示 日期/时间   表示 base64编

重剑无锋 6368

独立游戏开发者的新武器:实测腾讯混元3D自动绑骨,搭配Mixamo让角色动画制作效率翻倍

本文实测腾讯混元3D自动绑骨功能与Mixamo动画库的协同使用,显著提升独立游戏开发者的角色动画制作效率。通过解决卡通角色绑骨偏差、优化骨骼权重及动画状态机配置,使原本两周的流程缩短至三天,并分享Unity中的性能优化与版权合规要点。

weixin_42662605的博客 489

配置 SAP Web Dispatcher 的实战指南:打通 SAP Fiori、SAP Gateway 与前端系统的关键一跳

SAP Web Dispatcher 在 Fiori 架构中扮演关键角色,作为统一入口处理 HTTPS 请求、实现安全代理和流量分发。它将分散在不同系统的访问路径统一收口,解决浏览器同源策略限制,集中管理 HTTPS 终止和客户端信息传递。典型配置中,Web Dispatcher 监听 443 端口,根据路径将 OData 请求转发至 Gateway 系统,静态资源请求送至前端服务器。SSL 相关配置(如 PSE 文件)确保安全通信,而路由规则(wdisp/system_xx)决定请求转发目标。实施时需注意

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 102

yaml参数读取

这部分是包含指令,它们告诉编译器包含ROS的核心头文件、标准模板库中的。使节点保持运行状态,等待并处理回调函数,直到你按下Ctrl+C终止。容器和输入输出流库,以便你可以使用ROS功能、向量和标准输入输出。对于数组中的每个元素,首先检查它是否是一个结构体(如果任何检查失败,程序将中断。返回数组的大小,即其中包含的元素数量。,用于暂存从参数服务器获取的数据。如果成功,执行下面的代码块。如果不是,程序将在这里中断。这是一个范围for循环,用于遍历。参数,将输出一个错误消息。,用于存储点集,还有一个。

YEyeyee_的博客 411

13、7自由度机械臂混合逆运动学算法解析

本文介绍了一种针对7自由度机械臂的混合逆运动学算法,通过引入额外参数Φ解决冗余自由度问题,并实现了避障、避免关节超限和扩大工作空间。该方法采用解析逆运动学求解策略,克服了机械臂在奇异位姿时的配置不连续性问题。通过对比实验验证了该算法在腕部关节角度连续性和位姿可达性方面的优越性,同时结合躯干逆运动学显著扩展了机械臂的工作空间。

rgv23456789的博客 236

ros动态参数服务添加数组队列的参考设计 dynamic_reconfigure

参考: https://github.com/ros-perception/laser_filters参照:laser_filters/PolygonFilter.cfg polygon 多边形填充的是字符串,实际中是当作多维数组使用的,数组内数据依据‘[’ ']'括号来分隔开的数组参数转字符串, 字符串转数组,相应的参考函数 cmake 注意 参见polygon_filter.cpp std::vector parseVVF(const std::string& input,

kintzhao 919

[QMT量化交易小白入门]-三十四、让deepseek分析北京炒家的首板策略后,在打板前增加了选股范围(量化python代码解析)

print(f'开始盘前选股')这行代码定义了一个名为的函数,当调用这个函数时,会首先打印出“开始盘前选股”的信息,表明选股流程正式启动。1、可根据情况增删部分条件,目前盘前选股目前可以选出140多支,比之前全市场监听带宽压力小了很多。2、还可以自行添加其他选股条件,比如换手率计算,炸板可能性检测。3、xtdata的数据是有可能缺失的,自己写策略时,有可能需要剔除,或者从第三方库校正,比如部分股票的流通股数。

木头大左的博客 2698

RK356x U-Boot研究所(命令篇)3.12 mtd命令的用法

RK356x U-Boot研究所(命令篇)3.12 mtd命令的用法

Systemcall名屋 1685

ROS C++ 从参数服务器读取复杂配置

cpp读取ROS参数服务器中的复杂数据类型

SmileJayNew的博客 290

PCL 法向量夹角剔除错误匹配点对【2026最新版】

实现了一种简单的基于对应点法线角度的对应关系去除方法。博客长期更新,本文最新更新时间为:2026年5月24日。

点云侠的博客 41万+

ROS达妙机械臂DmHW.cpp详细解释

在参数服务器中,寻找dm_actuators,若找到,把他下面全部都内容都存入xml_rpc_value。: 这是一个全局命名空间的 ROS 句柄(NodeHandle),通常用于访问全局话题或服务。本教程使用达妙4310电机,通过rviz拖拽,控制3轴机械臂,以下是代码的详细解释。ROS_ASSERT:认为这件事必须是真的,如果不是真的,程序就立刻报错并自我毁灭。: 如果缺少任何一个,说明配置不完整,跳过当前循环,检查下一个串口配置。这个类的内部,定义了一组枚举值,用来标记当前存储的数据类型。

qq_66669252的博客 953

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

ROS使用教程-关于rosparam

引出launch时roslaunch首先检查roscore是否已经启动,如果没有则启动roscore。 roscore会做三件事: - 启动master节点,该节点是隐藏的,用于通过消息名查询目标节点,实现消息、服务在各个节点之间的连接 - 启动parameter server,用于设置与查询参数 - 启动日志节点,记录所有消息收发和stdout、stderr, 目前roscore暂不会加入

何必浓墨重彩 1万+

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

XML-RPC 实现C++和C#交互

数据即程序,RPC说白了依旧是传递数据的过程,只是过程在代码上更像函数调用。如下图:目前主流的RPC有两种: XML和JSON。XML是曾经的主角,兼容性更好。但如今移动互联网要求数据流量要小,而XML的缺点也随之暴露出来,JSON由于节省数据(大大减少了包头和标记的开销),如今变得更受欢迎。新浪微博API,如今全部升级为JSON了。RPC的实质是http协议,它封装了底层实现的细节,能让我们将注意力放在应用逻辑的实现,而非建立连接这样的问题。

ZZJc439d9的博客 243

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

基于 QT 的 XML-RPC 客户端

XML-RPC 协议是现在大多数 blog 站点支持的标准协议。通过使用该协议,我们可以很方便地使用离线编辑客户端编辑好文章,然后直接上传到 blog 系统进行发布。豆子目前正在进行的一个项目,OrbitsWriter 就是做得类似的工作。尽管完成度不高,但是 XML-RPC 一节已经调通。如果对该项目有任何建议或意见,可以在 GitHub 上找到项目地址。本文所叙述的实现,即是豆子用在 OrbitsWriter 中的代码。如果需要,完全可以很方便直接从中分离开来。

hw5230的博客 831

SpringBoot学习-02-yaml配置注入

yaml配置注入

weixin_43530798的博客 1627

SpringBoot(8) —— yaml给对象属性赋值的几种方式

目录1.为什么要使用yaml给对象属性赋值2.实践3.扩展 1.为什么要使用yaml给对象属性赋值 yaml可以直接给实体类的属性赋值 原来我们学习的给实体类赋值的方式有两种:①调用有参构造 ②使用注解@value 上面两种方式都可以实现对对象成员属性的赋值,但是我们每new一个新对象我们就需要在调用构造的地方显式的传入数据或使用注解@value的地方修改源代码,这显然不是我们想要的 yaml可以实现在配置文件中配置对象属性 2.实践 创建两个pojo:dog+personpackage com.

Jzandth的博客 3304

解析 yaml 文件| 根据 key 获取 yaml 文件中的 value | 将 yaml 文件一键转换成 csv 文件

根据 key 获取 yaml 文件中的 value,解析 yaml 文件

m0_57053326的博客 1788

yaml通过@ConfigurationProperties和@value方式注入值

yaml通过@ConfigurationProperties和@value方式注入值 a.绑定值的两种方式: @ConfigurationProperties @value 1.优先级:如果两者混用@ConfigurationProperties的优先级比@value的优先级高,但是二者可以互补; 2.@ConfigurationProperties中的数据来源与applicat...

wangtao的博客 3141

XML-RPC介绍(转载)

XMLRPC协议中文说明 xmlrpc xmlrpc是一个基于Internet的远程过程调用协议。 它主要通过消息(Message)调用工作,基于HTTP-POST,Message的Body部分是XML格式,同样当结果返回的时候也是XML格式。过程的参数可以是基本变量(Scalar),还可以是一个结构(struct)或者是一个数组(array)。 一个调用实例:...

hawk7的专栏 351

ROS学习之 cpp参数服务器

wiki链接 :wiki.ros.org/roscpp/Overview/Parameter%20Server ROS的参数服务器可以存储字符串,整型,浮点型,布尔型,列表,字典,iso8601数据,64基编码数据.字典数据要有字符串键.     roscpp的参数API支持所有这些,尽管在使用中常使用strings,integers,floats,booleans.XmlRpc::X

shiyue0010的专栏 2473

java application.yml 配置对象数组

Java yml文件中配置数组对象

Poison_1212的博客 8594

yaml数组解析_YAML详解

1 YAML简介YAML,即YAML Ain’t Markup Language的缩写,YAML 是一种简洁的非标记语言。YAML以数据为中心,使用空白,缩进,分行组织数据,从而使得表示更加简洁易读。YAML的在线Demo这个YAML转化JSON网页中进行上手练习2 YAML语法大小写敏感使用缩进表示层级关系禁止使用tab缩进,只能使用空格键缩进长度没有限制,只要元素对齐就表示这些元素属于...

weixin_39855706的博客 1万+
上一篇: 记一次2019MBP15.4蝶式键盘天才吧免费更换
下一篇: RuntimeError: one of the variables needed for gradient computation has been modified by an inplace
HayPinF
博客等级 码龄9年 175粉丝 140原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值