std::string :我是真的不想拼接字符串啊~~~那就“汉阳造”吧

一、场景和炼狱

我想,你肯定也遇到过这样的场景,传入的多个参数要通过字符串拼接成一条指令,各种数据类型(我们先只说基本数据类型),然后一通转换,一通拼接。如果处理的多了,这也将是一场人间炼狱。

打个比方。我有这样的一个指令,如下:

     /***************************************************** SPUL HighSetpoint,LowSetpoint,Frequency,DutyCycle*        int          int          int      float* SPUL    150,        10,          100,      0.75*****************************************************/

二、磨刀霍霍

我编写了一个如下的接口用于生成和发送指令

virtual  _Check_return_ I64 set_software_plusing(   _In_ int HighSetpoint,_In_ int LowSetpoint,_In_ int Frequency,_In_ float DutyCycle)
{// std::string cmd = "SPUL " +  std::to_string(HighSetpoint) + ","  ... return sendCommand(cmd,ERR_SPUL,"set software plusing error.");
}

写了一个我就拼不下去了,这TM的要命啊。有没有什么快速的std::string 字符串格式化生成的办法呢?
答案是肯定的。有一个不错的开源项目 fmt, 你可以在 https://github.com/fmtlib/fmt 找到 fmt 库的源代码和安装说明。
但是,我显然不可能为了用个手枪,然后把武器库拿过来吧,不用fmt的原罪是我嫌弃他“臃肿”;
没办法,手撸一个。

三、临阵"造"枪

#include <iostream>
#include <utility>
#include <sstream>
#include <string>namespace myfmt {
template<typename... Args>
std::string format(const std::string& fmt, Args... args)
{std::stringstream ss;formatHelper(ss, fmt, args...);return ss.str();
}template<typename T, typename... Args>
void formatHelper(std::ostream& os, const std::string& fmt, T value, Args... args)
{size_t pos = fmt.find("{}");if(pos != std::string::npos){os << fmt.substr(0, pos);os << value;formatHelper(os, fmt.substr(pos + 2), args...);}else{os << fmt;}
}
void formatHelper(std::ostream& os, const std::string& fmt)
{os << fmt;
}}//end of namespace myfmtint main() {std::string s = myfmt::format("dooooo {},{},{}", 42, 3.36, "this is a girl");std::cout << s << std::endl;}

当然,还有一些不完美的地方,不够黑大粗,不过笔者项目已经够用,那又有什么问题,暂不做优化和更多的拓展了。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/20564.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

三丰云评测:免费虚拟主机和免费云服务器体验

今天我来为大家分享一下我的三丰云评测体验。三丰云是一家提供免费虚拟主机和免费云服务器的服务商&#xff0c;为了方便大家了解他们的服务&#xff0c;我特地注册了他们的免费虚拟主机和免费云服务器进行试用。在实际体验中&#xff0c;我发现三丰云的服务表现非常出色。首先…

Multipass虚拟机磁盘扩容

Multipass 是一个用于轻松创建和管理 Ubuntu 虚拟机的工具&#xff0c;特别适合开发环境。要使用 Multipass 扩大虚拟机的磁盘容量&#xff0c;你需要经历几个步骤&#xff0c;因为 Multipass 自身并不直接提供图形界面来调整磁盘大小。不过&#xff0c;你可以通过结合 Multipa…

HTTP的系统登录页面,如何避免明文传输用户密码?

对于系统登录页面来说&#xff0c;我们作为开发人员&#xff0c;应该没有陌生的吧。就像下面这样子。 点击登录&#xff0c;调用/login 接口。来看下面截图中的 载荷(payload)数据&#xff0c;其中&#xff0c;密码 password 的值是明文。 如果你的站点使用的是HTTPS协议&…

SO3控制器原理与实现(对飞行器的控制实践)

SO3控制器原理与实现 1. 概述 SO3Control是一个基于SO(3)特殊正交群的姿态控制器&#xff0c;用于控制四旋翼等飞行器的姿态。该控制器输入期望的位置、速度、加速度以及偏航角&#xff0c;输出期望的力和四元数表示的姿态。 具体应用为当有一条三维轨迹的时候&#xff0c;控…

Adobe InDesign 专业桌面排版软件下载安装,Id软件丰富的排版和设计工具!

Adobe InDesign这款革命性的应用程序不仅彻底改变了出版业的生产流程&#xff0c;更引领着设计领域向前迈进。 在Adobe InDesign的众多强大功能中&#xff0c;对OpenType字体的支持堪称其一大亮点。OpenType字体不仅拥有更加丰富的字体样式和字符集&#xff0c;还具备更为灵活…

Qt Designer工具如何修改MainWindow窗口的标题

Qt Designer工具如何修改MainWindow窗口的标题 在MainWindow的属性编辑器中选择“windowTitle”后面一栏修改成期望的窗口标题名称即可。 按住“ctrlR”即可查看可视化界面的窗口标题

单片机超声波测距+WTD588D语音播报的设计

第一章 绪论 1.1 课题设计目的及意义 1.1.1设计的目的 随着科学技术的快速发展&#xff0c;超声波在测距中的应用越来越广。但就目前的急速水平来说&#xff0c;人们可以具体利用的测距技术还十分有限&#xff0c;因此&#xff0c;这是一个正在蓬勃发展而又有无限前景的技术…

智能办公本如何选择

智能办公本如何选择 引言 随着科技的不断发展&#xff0c;智能办公本已成为现代职场人士的重要工具。它们不仅具备传统纸质笔记本的书写体验&#xff0c;还融入了先进的智能技术&#xff0c;让办公变得更加高效便捷。在选择智能办公本时&#xff0c;我们需要关注多个方面&…

【通信专题】I2C通信硬件概述

通信协议在组织设备之间通信时扮演着重要角色。它基于系统要求而以不同方式进行设计。此类协议具有明确的、为实现成功通信而协商一致的规则。 I2C历史 I2C,即Inter-Integrated Circuit,是一种常用的串行通信协议。I2C总线创建于1982年,由飞利浦公司设计,旨在利用简单、稳…

BCS2024│云原生安全论坛启动

云原生凭借敏捷、高可用、弹性扩展等优点&#xff0c;已经成当前IT基础设施重点采用的云计算技术。然而&#xff0c;随着云原生业务的快速发展&#xff0c;诸多安全问题随之而来&#xff0c;如云原生开发流程缺乏安全监管&#xff1b;容器的动态变化和API访问增加了安全风险&am…

【Python打包成exe】

Python打包成exe 前言一、理论知识打底二、实操开始----pyinstaller【Base环境下】【这是一个失败案例】规规矩矩 总结 前言 先放点参考 这个字多&#xff0c;写得很详细⇨用 Pyinstaller 模块将 Python 程序打包成 exe 文件&#xff08;全网最全面最详细&#xff0c;万字详述…

红队内网攻防渗透:内网渗透之数据库权限提升技术

红队内网攻防渗透 1. 内网权限提升技术1.1 数据库权限提升技术1.1.1 数据库提权流程1.1.1.1 先获取到数据库用户密码1.1.1.2 利用数据库提权工具进行连接1.1.1.3 利用建立代理解决不支持外联1.1.1.4 利用数据库提权的条件及技术1.1.2 Web到Win-数据库提权-MSSQL1.1.3 Web到Win-…

Neural Filters:风景混合器

Ps菜单&#xff1a;滤镜/Neural Filters/创意/风景混合器 Neural Filters/CREATIVE/Landscape Mixer 风景混合器 Landscape Mixer滤镜通过与另一个图像混合或改变诸如时间和季节等属性&#xff0c;神奇地改变景观。 “风景混合器”滤镜利用人工智能和机器学习技术&#xff0c;首…

Java 多线程的创建

Java 多线程的创建 Java元的JVM允许程序运行多个线程&#xff0c;使用java.lang.Thread类代表线程&#xff0c;所有的线程对象都必须是Thread类或其子类 线程的创建方式有两种&#xff0c;一者为继承Thread类&#xff0c;一者为实现Runnable接口 实现方式之一&#xff1a;继承T…

【LeetCode算法】第111题:二叉树的最小深度

目录 一、题目描述 二、初次解答 三、官方解法 四、总结 一、题目描述 二、初次解答 1. 思路&#xff1a;二叉树的先序遍历。求出左子树的最小高度&#xff0c;求出右子树的最小高度&#xff0c;最终返回左子树和右子树的最小高度1。关键&#xff1a;若左子树的高度为0&…

【Linux】命名管道

一、命名管道的原理 在前面的博客中&#xff0c;我们学习了匿名管道&#xff0c;了解到了两个具有血缘关系的进程之间是如何进行通信的&#xff1f;那么在没有血缘关系&#xff08;毫不相关&#xff09;的进程之间是如何进行通信的&#xff1f; 大致思路是一样的&#xff0c;我…

重构与优化-组织数据(3)

重构组织数据是一个系统性的工程,旨在改进数据的存储方式、访问效率、质量和可用性,以更好地支持业务运营、分析决策和未来发展。以下是重构组织数据的一些关键说明点: 目的与动机 提升效率:通过优化数据结构、减少冗余数据和改善索引策略,加快数据查询和处理速度。 增强…

FCA-FineReport 试题及答案

第1题【判断题】服务器安装插件支持热部署&#xff0c;安装、删除、更新、禁用、启用不需要重启 A. 正确 B. 错误 正确答案&#xff1a;A 第2题【判断题】普通用户登录到决策系统平台与管理员登录界面相同 A. 正确 B. 错误 正确答案&#xff1a;A 第3题【判断题】用户管理可…

JavaScript倍速播放视频

F12打开开发者工具&#xff0c;打开控制台&#xff0c;输入这行代码&#xff0c;视频即可加速播放&#xff0c; 可以调整倍速&#xff08;2&#xff0c;4&#xff0c;8&#xff0c;16&#xff09; document. getElementsByTagName("video")[0]. playbackRate16

实现JDBC编程

JDBC编程 JDBC —> java database connectivity 即java数据连接, 是执行sql语句的javaAPI(application programming interface),所谓的数据库是一类软件,就会提供对应的API,数据库有很多种,不同的数据库提供对应的API是不一样的,而这个API有java.sql.* 和 javax.sql.*包中的…