CString::Format 的替代方案?

Posted

技术标签:

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

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

【问题讨论】:

【参考方案1】:

CStringprintf 样式格式提供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 和 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 上

【讨论】:

以上是关于CString::Format 的替代方案?的主要内容,如果未能解决你的问题,请参考以下文章

CString .Format

CString.Format 以相同的精度生成不同的值

给定 %d 时,VC++ 6.0 应用程序在 CString::Format 内崩溃

CString.Format

CString.Format汉字问题

VC++中CString.Format函数的问题