【问题标题】:Alternative to CString::Format?CString::Format 的替代方案?
【发布时间】:2009-01-01 11:50:02
【问题描述】:

在 VC6 中进行字符串格式化是否有更好的替代方法,在替换之前进行语法检查?

【问题讨论】:

    标签: c++ string mfc format


    【解决方案1】:

    CStringprintf 样式格式提供Format 方法,但这不是类型安全的。

    对于类型安全的字符串格式,您可以使用 std::stringstream / std::wstringstreamBoost Format 库,尽管它们都适用于 C++ std::basic_string 类模板,而不是 MFC CString 类。我已经在 VC6 中成功使用了这两个。

    Boost 格式很好,因为它允许您使用类似printf 的语法,并且如果您提供的参数与格式字符串不匹配,则会抛出异常,而使用 C++ iostreams 的字符串格式往往会使您的代码相当详细。

    请注意,您可以从std::string 创建CString 对象,如下所示:

    std::string s;
    CString str( s.c_str() );
    

    我希望这会有所帮助!

    【讨论】:

    • std::string 和 std::stringstream 都是标准库的元素。如果您需要宽字符变体,请使用 std::basic_string 和 std::basic_stringstream。所以:是的,符合 VC6。
    【解决方案2】:

    查看FastFormat。它有一个简单的语法和一个“接收器”——FastFormat 术语,用于接收格式化操作的结果——用于 CString。

    类似的东西:

    int i = 1;
    std::string ss = "a std string";
    CString cs = "a Cstring";
    
    CString result;
    
    fastformat::fmt(result, "i={0}, ss={1}, cs={2}", i, ss, cs);
    

    【讨论】:

      【解决方案3】:

      FormatString - smart string formatting
      作者:伊沃·贝尔切夫

      发布在 CodeProject 上

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-06-13
        • 2015-03-03
        • 2015-09-25
        • 2019-12-16
        • 2011-06-20
        • 2015-11-03
        • 2014-04-03
        • 2011-12-13
        相关资源
        最近更新 更多