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

Posted

技术标签:

【中文标题】如何在不使用对象的情况下连接字符串、整数和浮点数?【英文标题】:How to concatenate strings, integers and floating point numbers without using objects? 【发布时间】:2019-06-11 10:30:44 【问题描述】:

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

因此我创建了一个__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);

有人有想法吗? 谢谢

【问题讨论】:

__try 不是标准的。可能是编译器扩展。您需要指定您使用的编译器以及为什么使用这些而不是标准的try catch @bolov 它是结构化异常处理,用于捕获 Windows 异常的 MSVC 扩展(例如 DivisionByZero)。 try/catch 不会捕捉到这些。 【参考方案1】:

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

【讨论】:

函数ShowCrashdumpInformation()确实将字符串写入外部文件,它使用LPCTSTR作为输入。目前这是用__FUNCTION__ 填写的,但我想添加更多内容,因此我提出了问题。 (供您参考,我的代码中有 300 多个地方都有这样的结构,我正在寻找在这种特殊情况下添加更多信息) @Dominique:因此,针对特定情况,您可以在两者之间添加template<typename... T> void YourClass::ShowMoreCrashdumpInformation(LPCWSTR fun, T... args)【参考方案2】:

您可以使用预处理器宏来“字符串化”标准__LINE__ 宏,并依赖编译器相邻的字符串文字连接。

大概是这样的:

#define STRx(x) #x
#define STR(x) STRx(x)

#define FILE_FUNCTION_LINE (__FILE__ ":" __FUNCTION__ ":" STR(__LINE__))

...

ShowCrashdumpInformation(_T(FILE_FUNCTION_LINE))

只要您有文字值,您就可以使用STR 宏将它们“字符串化”,然后使用相邻的字符串连接。

虽然不能使用变量,但只能使用文字值。

【讨论】:

以上是关于如何在不使用对象的情况下连接字符串、整数和浮点数?的主要内容,如果未能解决你的问题,请参考以下文章

整数和浮点数转换

提取特定单词后的所有数字(整数和浮点数)

整数和浮点数

Python中整数和浮点数

Python中整数和浮点数

Python中整数和浮点数