字符串流<<运算符不适用于具有 C++11 的宏
stringstream << operator doesnot work with Macro with C++11
我们有一些宏观
#define LOGG(out,line,file,.....)
std::stringstream logprocess;
logprocess << std::stringstream(out) ;
functiona(out,....,....);
}
因此,要传递给Logg的东西可能是:
LOGG(message<<"i would like to print"<<interger,......)
所以我们主要使用"&lt;&lt;"从我们想要的构造器中构造函数,然后发送到宏观登录。它与GNUC 98完美搭配,但我们已与-STD = C 11一起编译,它给出了错误:
错误:"操作员&lt;&lt;''无匹配(操作数类型为'std :: stringstream {aka std :: basic_stringstream}'and'std :: stringstream {aka std :: basic_stringstream}')
好吧,正如@thundium所指出的那样,错误消息很明显。std :: stringstream无法使用它的&lt;&lt;&lt;操作员。也许您可以使用此方法:
logprocess << std::stringstream(out).str()
,但我不推荐。
我不能确定您在代码中如何确切使用此宏,但是我确实发现了一些可能的改进,例如:
- 为什么您的宏将文件和行作为参数接收?这是一个宏,它可以使用
__FILE__
和__LINE__
固有的 - 为什么在一个足够的时候创建两个字符串流?
- 为什么在实际日志记录设施周围有一个其他功能包装器,而不仅仅是使用std :: cout或std :: ofstream?
这是两个简单而微不足道的实现,我认为您可以在代码中使用最低调整:
#define LOGG1(...)
std::cout << __FILE__ << "[" << __LINE__ << "] " << __VA_ARGS__ << "n"
#define LOGG2(...)
std::stringstream ss;
ss << __FILE__ << "[" << __LINE__ << "] " << __VA_ARGS__ << "n";
functional(ss.str());
这是一个完整的示例
相关文章:
- 请解释这句话(cout<<1+int((a<b)^((b-a)&1) )<<endl
- 呼叫运营商<<临时
- MSVC是否支持C++11样式的属性而不是__declspec
- 创建LinkedList退出,返回代码为-11(SIGSEGV)
- 我可以将一个用clang c++11编译的对象与另一个用c++17编译的对象链接起来吗
- 继承:构造函数,初始化C++11中基类的类C数组成员
- 如何防止clang格式在流运算符调用之间添加换行符<<
- 如何将模板转换为C++11之前的模板
- <<操作员在下面的行中工作
- c++11评估顺序(未定义的行为)
- C++中的VLA,扩展名为std=C++11
- 代码在我的计算机上运行良好,但是在将其提交给coursera时遇到未知的信号11问题
- "类模板示例<int>;"语句对 C++11 是什么意思?
- this_thread::sleep_for和计时时钟之间的关系是否由C++11标准指定
- 如何使用lock_guard在c++11中实现scoped_lock功能
- C++11 中不同类型的对象的 std::array 的替代方案
- 为什么 -mmacosx-version-min=10.10 不阻止使用标记为从 10.11 开始的函数?
- 错误,包括&lt; ctype&gt;在原子上使用C 11
- std::vector<;uint8_t>;当C++11/14启用时,手动复制而不是调用memcpy
- c++11的特定过载<<操作人员