overload std::ostream<< for ngx_str_t
Closed this issue · 3 comments
zhanghongquan commented
Please add overload function for std::ostream << to take ngx_str_t as input.
inline std::ostream& operator<<( std::ostream& o, const ngx_str_t& t)
{
o.write( reinterpret_cast<const char*>(t.data), t.len);
return o;
}
chronolaw commented
I think these code could work:
106 template
107 friend T& operator<<(T& o, const ngx_str_t& s)
108 {
109 o.write(reinterpret_cast<const char*>(s.data), s.len);
110 return o;
111 }
or you can fork your own branch.
zhanghongquan commented
Thank you for quick reply.
In my environment:
gcc version 5.4.0 20160609 (Ubuntu 5.4.0-6ubuntu1~16.04.2)
ubuntu 16.04.1
code will failed like
/usr/include/c++/5/bits/basic_string.h:5172:5: note: template argument deduction/substitution failed:
In file included from /work/source/network/nginx/ngx_cpp_dev/ngxpp/NgxAll.hpp:41:0,
from /work/source/network/nginx/ngx_cpp_dev/http/echo/NdgEchoConf.hpp:6,
from /work/source/network/nginx/ngx_cpp_dev/http/echo/NdgEchoInit.hpp:6,
from /work/source/network/nginx/ngx_cpp_dev/http/echo/ModNdgEcho.cpp:4:
/work/source/network/nginx/ngx_cpp_dev/ngxpp/NgxVariable.hpp:199:11: note: ‘ngx_str_t’ is not derived from ‘const std::__cxx11::basic_string<_CharT, _Traits, _Alloc>’
o << x.m_v.str();
That's why I added code in previous post.
chronolaw commented
Please refer to NgxString.hpp:109