gpt4 book ai didi

c++ - 通过函数传递字符串流值,C++

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:19:15 24 4
gpt4 key购买 nike

我目前有一个日志系统,它接受一个 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);

有没有什么方法可以使用 stringstream 而无需在日志系统功能之外创建它来使用日志记录?

这尤其重要,因为我打算创建一个宏来防止任何函数参数在发布版本中编译。如果我必须在它之外创建 stringstream 并将其传入,则该宏将毫无用处。从技术上讲,我可以制作一个宏来执行我在这个问题中谈论的 stringstream 内容,但这非常困惑,因为我不会总是这样做将 stringstreams 与此日志记录一起使用,因此我将有一个用于标准日志记录的宏,以及一个用于使用 stringstreams 的不同宏,该宏在其中调用用于标准日志记录的宏。

最佳答案

以下按预期工作(已测试——用您的 logging::print 替换输出到 cerr):

#include<sstream>
#include<iostream>

class StringstreamLogger {
private:
std::stringstream s;

public:
StringstreamLogger () : s (std::ios_base::out) {
}

~StringstreamLogger () {
std::cerr << s.str () << std::endl; // logging::print (s.str ().c_str ());
}

std::stringstream& out () {
return s;
}
};

int main () {
StringstreamLogger ().out () << "My log message";
std::cerr << "Some later output to test for prompt logging (to ensure that logging is not delayed until the end of a block)" << std::endl;
}

关于c++ - 通过函数传递字符串流值,C++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10802493/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com