我想實現這個字符串流創建日誌宏:在擴展
#include <iostream>
#include <sstream>
void log(
const char* argFile,
int argLineNb,
const char* argFunction,
std::stringstream& argString) {
std::cout << argFile << ":" << argLineNb << " " << argFunction
<< " " << argString.str()<< std::endl;
}
/**
* \brief Macro declarations
*/
#define LOG_TEST(f) \
log(__FILE__, __LINE__, \
__FUNCTION__, (std::ostringstream << f))
int main(int argc, char** argv) {
LOG_TEST("HELLO");
LOG_TEST("HELLO" << " !");
return 0;
}
問題是,我真的不知道該怎麼做,因爲我得到了以下錯誤:
類型的參考無效初始化 '的std :: stringstream的& {又名的std :: basic_stringstream &}' 從類型的std :: basic_ostream的」表達:: __ ostream_type {又名的std :: basic_ostream
我不知道是否有這樣做與升壓...
你傳遞一個tempval'stringstream'的功能要求**非const **參考。除少數編譯器之外,所有這些都不會讓你這麼做,因爲它是非標準的。最爲人熟知的是微軟。幾乎其他人都不會。 – WhozCraig 2013-04-28 00:58:13
@tacp如果你要從OP的鏈接粘貼代碼,至少要粘貼* verbatim *。您發佈的代碼與問題中提供的鏈接上的代碼不同。他的代碼在日誌宏中有一個'std :: stringstream()',你粘貼的代碼有'std :: ostringstream'(注意缺少自動構造)。 – WhozCraig 2013-04-28 01:01:16
@WhozCraig我沒有粘貼它,我只是在OP的問題中改變了代碼的格式。問題是什麼?我甚至沒有看過鏈接。 – taocp 2013-04-28 01:03:27