|
View:
New views
1 Messages
—
Rating Filter:
Alert me
|
|
|
Tag dispatchingHello dears,
I've noticed that in uBlas tag dispatching is done via the creation of a temporary object. E.g.: boost::numeric::ublas::leading_dimension(m, typename M::orientation_category() ); boost::numeric::ublas::end (it1_, iterator1_tag ()) Is there a specific why this method (dispatch-by-instance) is better than using a dipatch-by-type? In general, dispatch-by-instance is preferable if tags may have a hierarchy so that this belowe works: struct base_tag1 {}; struct base_tag2 {}; struct derived_tag: public base_tag {}; void foo(/*...*/, my_base_tag1 const&); // #1 void foo(/*...*/, my_base_tag2 const&); // #2 foo(/*...*/, base_tag1()); // Call #1 foo(/*...*/, derived_tag1()); // Call #2 However, these creates temporary objects. Instead, using dispatch-by-type we avoid to create temp objects even if we loose the possibility to use tags hierarchy. So returning to uBlas, instead of using: ---[code]--- template < typename M > BOOST_UBLAS_INLINE int leading_dimension( const M &m, row_major_tag ) { return m.size2() ; } template < typename M > BOOST_UBLAS_INLINE int leading_dimension( const M &m, column_major_tag ) { return m.size1() ; } template < typename M > BOOST_UBLAS_INLINE int leading_dimension( const M &m ) { return leading_dimension( m, typename M::orientation_category() ) ; } ---[/code]--- Why not use the following (for instance)? ---[code]--- template struct<typename O> struct leading_dimension_impl; template <> leading_dimension_impl<row_major_tag> { template <typename M> static BOOST_UBLAS_INLINE typename int apply(M const& m) { return m.size2(); } }; template <> leading_dimension_impl<column_major_tag> { template <typename M> static BOOST_UBLAS_INLINE typename int apply(M const& m) { return m.size1(); } }; template < typename M > BOOST_UBLAS_INLINE int leading_dimension( const M &m ) { return leading_dimension<typename M::orientation_category>::apply(m) ; } ---[/code]--- I think in uBlas tag hierarchy is not needed. Note: I'm a beginner of template meta-programming so sorry if the question is trivial. Thank you!! Cheers, -- Marco _______________________________________________ ublas mailing list ublas@... http://lists.boost.org/mailman/listinfo.cgi/ublas Sent to: lists@... |
| Free embeddable forum powered by Nabble | Forum Help |