Re: [Aqsis-development] [Aqsis-commits] SF.net SVN: aqsis: [959] trunk/aqsis/aqsistypes/aqsis_types
Brought to you by:
ltatkinson,
pgregory
From: Chris F. <fo...@ph...> - 2007-04-23 00:36:21
|
On Sat, Apr 21, 2007 at 11:37:26AM -0400, aj...@sp... wrote: > G'day all. > > Quoting Anteru <An...@sh...>: > > > Yeah, just take by const T&, this does not affect numeric types at all, > > at least with the compilers I tested it last time. > > If you're concerned, though, there's a Boost recipe for this. > > If you #include <boost/call_traits.hpp>, then: > > boost::call_traits<T>::param_type is the "best" way to pass a > parameter of type T to a function. > > The best way to pass an int is "int const". The best way to pass a > CqClass is "CqClass const &". > > boost::call_traits<T>::value_type is the "best" way to return a > value of type T from a function. > > The use of value_type isn't immediately obvious, but the main use is > for C arrays. The best way to return int[3] is "const int *". Thanks Andrew, that's very intersting and informative. I an implementation, but it seems like the compiler is having trouble deducing the template parameter types, which kind of defeats the purpose of the exercise :(. In particular, I wrote a 'clamp3' in the obvious way: template<typename T> inline typename boost::call_traits<T>::value_type clamp3( typename boost::call_traits<T>::param_type a, typename boost::call_traits<T>::param_type min, typename boost::call_traits<T>::param_type max) { return a < min ? min : (a > max ? max : a); } but then to use it I have explicitly specialise: clamp3<double>(a,min,max) which isn't very nice at all. It does however recover the efficency of the simple pass-by-value version. Any ideas for a workaround? ~Chris. |