我们有一些像
这样的宏#define LOGG(out,line,file,.....)
std::stringstream logprocess; \
logprocess << std::stringstream(out) ; \
functiona(out,....,....);
}
因此传递给LOGG的事情可能是:
LOGG(message<<"i would like to print"<<interger,......)
所以我们主要使用&#34;&lt;&lt;&#34;从whater构造函数到我们想要的类型然后发送到MACRO LOGG。它与gnuc ++ 98完美配合,但我们用-std = c ++ 11编译,它给出了错误:
错误:&#39;运营商&lt;&lt;&lt;&# (操作数类型是&#39; std :: stringstream {aka std :: basic_stringstream}&#39;和#std :: stringstream {aka std :: basic_stringstream}&#39;)
答案 0 :(得分:0)
好吧,正如@thundium指出的那样,错误信息非常清楚。 std :: stringstream不能接受std :: stringstream使用它的&lt;&lt;运营商。也许你可以改用它:
logprocess << std::stringstream(out).str()
但我不会推荐它。
我无法确定您在代码中使用此宏的确切方式,但我确实发现了一些可能的改进,例如:
__FILE__
和__LINE__
本身以下是两个简单而简单的实现,我认为您可以在代码中使用最少的调整:
#define LOGG1(...) \
std::cout << __FILE__ << "[" << __LINE__ << "] " << __VA_ARGS__ << "\n"
#define LOGG2(...) \
std::stringstream ss; \
ss << __FILE__ << "[" << __LINE__ << "] " << __VA_ARGS__ << "\n"; \
functional(ss.str());