我目前有一个日志系统,它需要一个 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);
有没有办法以这样的方式使用日志记录,我可以使用字符串流而不必在日志记录系统的功能之外创建它?
这一点尤其重要,因为我打算创建一个宏来防止任何函数参数在发布版本中编译。如果我必须在它之外创建字符串流并将其传入,该宏将毫无用处。从技术上讲,我可以制作一个宏来执行我在这个问题中所说的字符串流,但这很混乱,因为我不会总是在此日志记录中使用 stringstreams,因此我将有一个用于标准日志记录的宏,以及一个用于使用 stringstreams 的不同宏,它在其中调用标准日志记录的宏。