
Ping? Anyone? I'd be very grateful for any advice... On 10/15/07, Stjepan Rajko <stipe@asu.edu> wrote:
Hello,
As I'm preparing the dataflow library for submission (a.k.a. signal network gsoc project), I'm revisiting some of the design choices. Since I'm not too experienced with generic library design, I was wondering if anyone would share some advice on which tag dispatch convention to use.
For my specializable functions, I adapted what is used in fusion, e.g.:
template<typename ProducerTag, ConsumerTag> struct operation_impl;
template<> struct operation_impl<some_producer_tag, some_consumer_tag> { template<typename P, typename C> struct apply { typedef some_result_type type;
static type call(P &p, C &c) { ... } }; };
and then free function `operation` extracts the tags from its arguments, calls operation_impl, and returns the result.
Could someone tell me what the advantages/disadvantages of this approach are compared to, say,
template<> struct operation_impl<some_producer_tag, some_consumer_tag> { // specify result type using result_type typedef or template<> struct result // ...
template<typename P, typename C> some_result_type operator()(P &p, C &c) { ... }; };
, or the technique described in: http://www.boost.org/more/generic_programming.html,
or any other tag dispatching convention I should be aware of?
Thanks in advance!
Stjepan