
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