是否存在支持自定义左右分隔符的std::quoted等效工具?若无可否说明原因?
自定义分隔符的字符串转义包裹工具相关问题
标准库现状
C++标准库中的std::quoted仅支持双引号作为固定包裹分隔符,没有原生提供支持自定义左右分隔符的等效工具,也无法直接配置内部分隔符的转义规则。
为什么标准库不提供这类工具?
- 通用性与复杂度的平衡:
std::quoted的设计目标是覆盖最常见的字符串序列化场景(如CSV、简单JSON格式),固定双引号的规则足以满足多数基础需求。若支持自定义分隔符,需额外处理不对称分隔符的转义逻辑、转义字符配置等,会大幅提升接口复杂度,不符合标准库"最小够用"的设计原则。 - 场景特异性强:自定义分隔符的需求通常绑定特定业务格式(如大括号包裹配置项、尖括号标记特殊字段),这类场景没有统一行业标准,标准库难以抽象出适配所有情况的通用实现。
- 扩展性预留:标准库通过流操作框架预留了扩展空间,开发者可基于现有机制轻松封装符合自身需求的工具,无需标准库直接提供。
自定义实现方案
你可以基于C++流操作框架自行实现类似功能,示例代码如下:
#include <iostream> #include <string> template<char Left, char Right, char Escape = '\\'> struct CustomQuoted { explicit CustomQuoted(const std::string& s) : str(s) {} const std::string& str; }; template<char Left, char Right, char Escape> std::ostream& operator<<(std::ostream& os, const CustomQuoted<Left, Right, Escape>& manip) { os << Left; for (char c : manip.str) { if (c == Left || c == Right || c == Escape) { os << Escape; } os << c; } return os << Right; } // 辅助函数简化调用 template<char Left, char Right, char Escape = '\\'> auto custom_quoted(const std::string& str) { return CustomQuoted<Left, Right, Escape>(str); } // 使用示例 int main() { std::string test = "包含{和}的测试字符串,还有\\转义符"; std::cout << custom_quoted<'{', '}'>(test) << std::endl; // 输出:{包含\{和\}的测试字符串,还有\\转义符} return 0; }
该实现支持自定义左右分隔符与转义字符,会自动转义字符串内部的分隔符及转义字符本身,核心逻辑与std::quoted一致且更灵活。
内容的提问来源于stack exchange,提问作者TStancek
相关产品推荐
相关产品推荐

