![](/img/trans.png)
[英]Wrap a c++ function with output parameter for use in javascript/node
[英]C++ use operator<< output as parameter in function
我是 C++ 的新手。 我已经看到了无数使用operator<<
示例,其中将输出发送到cout
或cerr
。 大多数类重载此运算符以在控制台中具有人类可读的输出,例如在此示例中:
ostream& operator<<(ostream& os, const Date& dt)
{
os << dt.mo << '/' << dt.da << '/' << dt.yr;
return os;
}
它允许这样做:
Date dt(5, 6, 92);
cout << "The date is " << dt;
现在,我想做同样的事情,但我想输出到文件,而不是控制台。 我正在使用 Boost,我正在按照此处的示例进行操作:
logging::record rec = lg.open_record();
if (rec)
{
logging::record_ostream strm(rec);
strm << "Hello, World!";
strm.flush();
lg.push_record(boost::move(rec));
}
这个例子很好,但我想把这段代码放到一个函数中。 到目前为止,这是我的代码:
namespace logging = boost::log;
void log(severity_level level, std::string message)
{
src::severity_logger<severity_level> lg;
logging::record rec = lg.open_record(keywords::severity = level);
if (rec)
{
logging::record_ostream strm(rec);
strm << message;
strm.flush();
lg.push_record(boost::move(rec));
}
}
当然这适用于string
,但它不适用于上面示例中的Date
:
Date dt(5, 6, 92);
log(severity_level::info, "The date is "); // No problem here
log(severity_level::info, dt); // Error, dt is not of type string
我怎么能做这样的事情?
要支持多种类型,请将log()
设为模板函数。 原始代码的问题在于您只重载了operator<<
,而没有重载任何转换运算符。
template<typename T>
void log(severity_level level, const T& message)
{
// ...
strm << message;
// ...
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.