【发布时间】:2015-06-25 08:52:40
【问题描述】:
我试图编写一个方法,该方法将使用>> 运算符作为类似于std::cin 的参数,但我不知道如何。是否有可能创建这种将这种流作为参数的方法,将其正确转换(例如将所有整数转换为字符串等),然后保存到 std::string 变量?
这是我想如何运行该函数的示例:
int i = 0;
myMethod << "some text" << i << "moar text";
在该方法中,我想获取这些参数并存储在一个字符串中。
编辑
我将尝试准确解释此应用程序的用途:我正在尝试创建一个 Clogger 单例类,该类将用于将日志保存到文件中。通过这种结构,我可以从代码中的任何位置调用*CLogger::instance() << "log stuff";,这没关系。感谢这个主题的答案,我来到了这个。问题是我使用的每个operator<<,都会调用该对象。因此,如果我执行 *CLogger::instance()
template<typename T>
CLogger& operator<<(const T& t)
{
...
return *this;
}
这对我不利,因为我打算在每个日志行之前和之后添加一些文本。例如,我总是想在之前和之后添加时间std::endl。按照我给出的例子而不是得到:
[00:00] log stuff more stuff even more
我会得到:
[00:00] log stuff
[00:00] more stuff
[00:00] even more
所以我尝试通过改变这样的方法来消除这种行为:
template<typename T>
CLogger& operator<<(const T& t)
{
ostringstream stream;
stream << t;
m_catString += stream.str();
if (stream.str() == "\n")
{
push_back(m_catString);
m_catString.clear();
}
return *this;
}
这样,如果我在末尾添加"\n",程序就会知道何时推送新的日志行。它几乎没问题,因为我敢打赌我会忘记添加这个。有没有更巧妙的办法?
【问题讨论】:
-
有数以千计的教程和问题,每一本介绍性的 c++ 书籍都涵盖了它。尝试阅读一本,如果遇到困难,请返回。
-
同时修正你的标题。您那里的运算符有误。
-
@juanchopanza 感谢您的提示,我已修复它。问题是这个主题不是那么基本,我发现很难找到任何直接的信息。此外,C++ 书籍并没有说太多。
-
您可能应该在询问之前使用搜索引擎的强大功能。 :)
-
@ŁukaszPrzeniosło 看看我的编辑