c++ - Why is my overloaded << not returning any data? -
i have class loads vector<unsigned char> using asio's asynchronous methods. overloaded << operator return data.
the problem though buffer full , valid, operator not return data.
my buffer: vector<unsigned char>read_buffer;
operator declaration:
friend std::vector<unsigned char> operator<<(const vector<unsigned char>output, const shared_ptr<socket>socket) noexcept;   the implementation:
std::vector<unsigned char> operator<<(const vector<unsigned char>output,                                            const shared_ptr<socket>socket) noexcept {       std::cerr << output.size() << std::endl;       std::cerr << socket->read_buffer.size() << std::endl;       return socket->read_buffer;     }   where std::cerr << socket->read_buffer.size() << std::endl; has right size , step step debugging show content valid.
but when data back:
vector<unsigned char> response; response << socket;   response empty. i've tried initialising length of expected response end buffer x null characters.
stumped this. shouldn't return statement copy or move value out?
response << socket;   means
operator<<(response, socket);   and in form it's clear you're discarding return value.
that code compiles prototype reads const vector<unsigned char>output hint you're never modifying output vector.
if want work stream insertion operators - appending left-hand side , being chainable, so:
 response << socket << another_socket;   the first parameter should non-const reference, , should return non-const reference same object:
vector<unsigned char>& operator<<(vector<unsigned char>& output,                                   const shared_ptr<socket>socket) noexcept  {       output.insert(output.end(), socket->read_buffer.begin(), socket->read_buffer.end());       return output; }      
Comments
Post a Comment