我有多个正在打印的.cpp文件,我想将其重定向到一个字符串。我的项目结构是:一个主文件,它从另一个文件和另一个文件调用函数。如果我有一个.cpp文件,使用stringstream很容易,但是如果有多个文件我该如何解决呢?
Main.cpp的:
#include "Second.h"
int main() {
std::string buffer = "First line";
printOut(buffer);
std::cout << "Hello world" << std::endl;
}
Second.h:
#include <string>
void printOut(std::string buffer);
Second.cpp
#include "Second.h"
void printOut(std::string buffer) {
std::cout << buffer << std::endl;
}
在这种情况下,字符串应如下所示:
redirectedString = First line\nHello World\n
答案 0 :(得分:1)
可以使用合适的流缓冲区拦截标准流的输出。例如:
void do_something_with(std::string const& s) {
// ...
}
struct basicbuf: std::streambuf {
std::string buf;
int_type overflow(int_type c) {
if (c != traits_type::eof()) {
this->buf.push_back(c);
}
return traits_type::not_eof(c);
}
int sync() {
do_something_with(buf);
buf.clear();
return 0;
}
};
int main() {
basicbuf buf;
std::streambuf* orig = std::cout.rdbuf(&buf);
std::cout << "hello, world\n" << std::flush;
std::cout.rdbuf(orig);
}
使用多个线程时,您可能希望使用线程本地缓冲区来避免数据争用。被调用的函数会主动将缓冲区转移到需要的地方。