You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

是否存在支持自定义左右分隔符的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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.27 00:33:16