如何在不使用对象的情况下连接字符串、整数和浮点数

How to concatenate strings, integers and floating point numbers without using objects?

本文关键字:字符串 连接 整数 浮点数 情况下 对象      更新时间:2023-10-16

我想在故障转储文件中添加信息,以防我的应用程序崩溃。

因此,我创建了一个__try - __except子句:

__try
{
  Do_Something();
}
__except (ShowCrashdumpInformation(_T(__FUNCTION__));

不仅仅是__FUNCTION__,我想添加更多信息,但我该怎么做?

最简单的方法是使用 CString ,但由于编译器错误C2712(无法在需要对象展开的函数中使用 __try(而阻止。

所以,我想使用LPCTSTR字符串(在我的应用程序中广泛使用(。

因此,它应该看起来像(CString替代方案(:

CString temp; temp.Format(_T("Do_Something, int=[%d], float=[%f], string=[%s]), iParam, fParam, strParam);

有人有想法吗?
谢谢

到目前为止,最简单的解决方案就是简单地回避这个问题。只需将确切的参数(而不是转换(转发到执行实际写入文件的(模板(函数。由于__catch不在模板函数本身中,而是在堆栈的上一级,因此您是安全的。

您可以使用预处理器宏来"字符串化"标准__LINE__宏,并依赖于编译器相邻的字符串文本串联。

也许是这样的:

#define STRx(x) #x
#define STR(x) STRx(x)
#define FILE_FUNCTION_LINE (__FILE__ ":" __FUNCTION__ ":" STR(__LINE__))
...
ShowCrashdumpInformation(_T(FILE_FUNCTION_LINE))

只要您有文本值,就可以使用 STR 宏将它们"字符串化",然后使用相邻的字符串串联。

但是,使用

变量是不可能的,只能使用文字值。