![](/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.