C++ 内联字符串格式化和数字转换

标签 c++ string formatting inline log4cxx

C#有一个很好的静态方法

String.Format(string, params string[]);

返回一个新字符串,其中包含所提供的格式和值。 C++ 中有等效项吗?

原因是因为我正在使用 log4cxx 并且想利用像这样的宏

LOG4CXX_DEBUG( logger, expr );

它使用短路评估,因此如果未启用日志级别 DEBUG,则永远不会评估 expr。

目前,在 C++ 中,我是这样做的:

CString msg;
msg.Format( formatString, values... );

LOG4CXX_INFO( _logger, msg );

这违背了目的,因为我必须首先分配和格式化字符串,因此短路逻辑几乎没有效率。

尝试使用数值进行简单日志记录时会出现类似的问题。这个,不会编译:

LOG4CXX_DEBUG( _logger, "the price is " + _some-double_);

所以我最终不得不写这样的东西:

CString asStr;
asStr.Format( "%d", _some-double_ );
LOG4CXX_DEBUG( _logger, "the price is " + asStr );

这又违背了目的。

我根本不是 C++ 专家,所以我希望更多知识渊博的人可以提供帮助。

最佳答案

log4cxx 接受类似流的参数,所以你可以这样写,例如:

LOG4CXX_DEBUG( _logger, "the price is " << price );

关于C++ 内联字符串格式化和数字转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1297914/

相关文章:

python - 如何创建可用作实际字符串的可变字符串类?

c - 为什么使用 snprintf 会出现运行时错误?

java - 用java读取数据并格式化

java - 在Clojure的格式化函数中设置舍入模式

c++ - WaitForSingleObject 不起作用

c++ - 继承决议

c++ - 如何一致地重播事件列表

c++ - 复制构造函数双向链表中的段错误

string - 在 Elasticsearch 中如何映射由字符分隔的文本?

python - 即使我在 python 中将变量声明为 float,也会发生舍入