chronolaw/ngx_cpp_dev

overload std::ostream<< for ngx_str_t

Closed this issue · 3 comments

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;
}

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.

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.

Please refer to NgxString.hpp:109