![](/img/trans.png)
[英]How to include a newline in a C++ macro or how to use C++ templates to do the same?
[英]How to implement a logging macro with automatic newline in C++
在C ++庫glog (Google日志記錄模塊)中,有一個不錯的界面,您可以在其中編寫
LOG(INFO) << "abc " << my_var;
在運行時,它會在運行時打印類似abc 5\\n
的內容(如果my_var為5),並在其中自動以換行符終止。
這比必須始終以std::endl
終止要優越得多
std::cout << "abc " << my_var << std::endl;
我需要在代碼中復制這種效果的最簡單方法(代碼+宏)是什么?
我認為這個想法是要返回一個臨時包裝對象:
#include <iostream>
struct Log
{
~Log(void) { ::std::cout << ::std::endl; }
};
template<typename T> Log &&
operator <<(Log && wrap, T const & whatever)
{
::std::cout << whatever;
return ::std::move(wrap);
}
int main()
{
Log() << "whatever";
Log() << "more";
return 0;
}
請注意,此宏可在記錄開始時用於執行條件分支。 如果嚴重性級別較低,則跳過日志記錄。
#define LOG(level) \
if(g_log_lelevel <= level) Log()
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.