Here's the story:

I'm receiving a bunch of messages (until more == false) then processing them.

Sticking them into an stl container doesn't really work due to message_t being non-copyable.

So I'm probably going to use boost::intrusive_ptr, and write a wrapper class:

class message_wrapper_t : public zmq::message_t {
...
};

In order to do this properly I'm going to write three constructors and forward them to the corresponding message_t constructors.

Now I have to track the message_t constructors if I want this to be generally reusable.

It's not bad, but the thought is to use, e.g. the basic_string model for message_t, and instead define zmq::basic_message_t:

template <typename _T>
class basic_message_t : public _T {
};

class empty_base_t {
};

typedef basic_message_t<empty_base_t> message_t;

That way users can stick e.g. intrusive_bases in there:

class intrusive_message_base_t {
        int count_;
};

typedef basic_message_t<zmq::basic_message_t> counted_message_t;

void intrusive_ptr_add_ref(counted_message_t* pm) { ++pm->count_; }
...

Admittedly you may have to add a templated copy constructor for the base class, so you can initialize like e.g.:

zmq_message_t<more_complex_base_t> msg(more_complex_base_t("argument"));

I haven't really thought beyond this point... are there other uses for templated bases for message_t? Not sure, but food for thought.

Right now I'm going to wrap the message_t class and implement the constructors. :-)

Thanks,

Best,

Matt
_______________________________________________
zeromq-dev mailing list
[email protected]
http://lists.zeromq.org/mailman/listinfo/zeromq-dev

Reply via email to