我这几天都是这样,我想我错过了一些简单的事情。 这就是cout的工作原理:
cout << "Testing" << 5;
请注意,输入可以是任何内容,字符串,int等。而不是cout我想使用Log,并捕获所有数据并将其写入文件。这是想要的:
log << "Testing" << 5;
最近我得到了。 部首:
class LogFile {
public:
void write(std::string input);
int operator<<(const char u[100]);
int operator<<(const int u);
};
C ++
int LogFile::operator<<(const char u[100]) {
std::string s;
std::stringstream ss;
ss << u;
s = ss.str();
this->write(s);
return 0;
};
int LogFile::operator<<(const int u) {
std::string s;
std::stringstream ss;
ss << u;
s = ss.str();
this->write(s);
return 0;
};
运行的代码(仅写入“Testing”,忽略int):
LogFile log;
log << "Testing" << 5;
目标是编写一个模仿cout的函数,但不是打印,而是将数据写入文件。任何建议或帮助表示赞赏!
答案 0 :(得分:2)
您可以使用模板operator<<
:
#include <sstream>
struct Log
{
void write(std::string const& s);
template<class T>
Log& operator<<(T const& msg)
{
std::stringstream ss;
ss << msg;
write(ss.str());
return *this;
}
};
这可能是一种用法:
int main(int argc, char **argv)
{
Log log;
log << 8;
log << "Hello, " << "World!";
std::string msg("plop");
log << msg;
}
答案 1 :(得分:1)
回答问题(尽管使用不同方法可以更好地实现目标):
您的operator <<
返回0
- 整数类型。当你在返回值上调用operator<<
时,你最终调用内置的按位移位运算符,它只是将0按位0移位,丢弃结果。
如果您尝试log << "Testing" << "Testing";
要修复代码,您的operator<<
应该返回对*this
的引用 - LogFile
类型的对象。
答案 2 :(得分:1)
&#34;模仿cout的功能&#34; - cout
不一个函数。这是对象。您尝试做的是创建一个对象,可以与流插入器一起使用并写入日志文件。 std::ofstream
可能会在这里使用。