Pooyan McSporran wrote:
I'm trying to use a combination of the iostreams library and the serialization library in order to be able to serialise objects and send them over a socket.
Sounds reasonable.
I've written a class called "SocketDevice" which implements a bidirectional iostreams instance, and I'm trying to use this with serialization, in particular the binary_oarchive and binary_iarchive archive models.
The problem is that when I do this, the code ends up calling a copy constructor (which doesn't exist) on my SocketDevice class. However I don't want to implement a copy constructor for this class as it doesn't make sense (as it manages a socket and a buffer for that socket, etc).
Currently, except for standard streams and stream buffers, which are
given special treatment, Boost.Iostreams fitlers and devices must be
copy constructible. (See, e.g., the documentation for the template
parameter T here:
http://www.boost.org/libs/iostreams/doc/index.html?path=3.3)
The standard way to make a device copy constructible is to use
shared_ptr; you can see examples by looking at the implementation of
file, file_descriptor, and mapped_file.
I'm considering adding a storage policy parameter to the stream and
stream buffer templates to allow them to store a reference or an owned
pointer to a filter or device; this would allow you to do something like
this:
SocketDevice dev(sock);
stream_buffer