CString::Format 的替代方案?
Posted
技术标签:
【中文标题】CString::Format 的替代方案?【英文标题】:Alternative to CString::Format? 【发布时间】:2009-01-01 11:50:02 【问题描述】:在 VC6 中进行字符串格式化是否有更好的替代方法,在替换之前进行语法检查?
【问题讨论】:
【参考方案1】:CString
为printf
样式格式提供Format
方法,但这不是类型安全的。
对于类型安全的字符串格式,您可以使用 std::stringstream
/ std::wstringstream
或 Boost 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查看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 上
【讨论】:
以上是关于CString::Format 的替代方案?的主要内容,如果未能解决你的问题,请参考以下文章