通过函数C传递stringstream值
我目前有一个日志系统,它接受char *和var args,然后使用它们来执行printf.这适用于C风格的字符串,但我有点清洁.目前,如果我使用std :: stringstream,我必须在日志系统之外创建stringstream,然后将char *用于stringstream给出的字符串.它看起来像这样:
std::stringstream strStream; strStream << "The value of x is: " << x; logging::print( strStream.str().c_str() ); 我想要的是将参数传递给函数,就像我直接使用字符串流一样.从用户的角度来看,这看起来像这样: logging::printStream("The value of x is: " << x); 或者可能是这样的: logging::printStream("The value of x is: ",x); 有没有办法以这样的方式使用日志记录,我可以使用字符串流而不必在日志系统的函数之外创建它? 这一点尤其重要,因为我打算创建一个宏来阻止任何函数参数在运输版本中进行编译.如果我必须在它之外创建字符串流并将其传入,宏将无用.从技术上讲,我可以创建一个宏来完成我在这个问题中讨论的字符串流的东西,但是这很麻烦,因为我不会总是使用字符串流与此日志记录,所以我将有一个宏用于标准日志记录,并使用不同的宏来使用其中的字符串流调用宏进行标准日志记录. 解决方法
我想出了两个HACK解决方案,但它们应该可以工作.第一个不使用范围解析运算符,更安全.第二个使用noop int变量来伪造范围.
#define logging_printStream(token) { std::stringstream o; o << token; logging::print(o.str().c_str()); } namespace logging { int noop; } #define printStream(token) noop = 0; { std::stringstream o; o << token; logging::print(o.str().c_str()); } int main(int argc,const char** argv) { int i = 1; // MORE SAFE logging_printStream(i) logging_printStream("is this magic? " << (i ? "yes" : "no")) // LESS SAFE logging::printStream(i) logging::printStream("is this magic? " << (i ? "yes" : "no")) } 由于17.6.4.3.2,我将logging__printStream更新为logging_printStream
由于3.6.1,我单独留下了主要声明
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- ajax – 如何在函数内触发Google Adwords转换,并将转换标签
- ACE_Reactor实现运行时接收键盘输入
- 防止将引用的程序集PDB和XML文件复制到输出
- c# – 为什么LINQ使用Data.DataTableCollection进行转换
- 正则表达式 – 为什么.*(?!Integration)测试匹配FooInteg
- 浅析C#中StringBuilder类的高效及与String的对比
- oracle – 在工作日截断表的函数
- react native 配置方面的问题汇总
- cocos2dx使用AssetsManagerEx进行热更新
- 使用JSONObject接收客户端传递的参数,减少对固定Bean对象的