
Boost : 
From: Deane Yang (deane_yang_at_[hidden])
Date: 20040120 15:36:34
Am I right that most of this effort is aimed at avoiding
an extra pair of parenthesis? To allow
double pi = boost::constants::pi<double>;
instead of requiring
double pi = boost::constants::pi<double>();
?
I remember when this first came up, and it was explained
that many people could not live with the latter.
Is the elimination of the "()" really worth all this effort
and complexity?
Paul A. Bristow wrote:
> This method of providing constants was rejected by a formal review,
> and a _portable_ method meeting all requirements is still being worked on by
> Daniel Frey. (Any progress Daniel?)
>
> Paul
>
> Paul A Bristow, Prizet Farmhouse, Kendal, Cumbria, LA8 8AB UK
> +44 1539 561830 Mobile +44 7714 33 02 04
> mailto:pbristow_at_[hidden]
>
>
>
>  Original Message
>  From: boostbounces_at_[hidden]
>  [mailto:boostbounces_at_[hidden]]On Behalf Of Andy Little
>  Sent: Tuesday, January 20, 2004 3:30 PM
>  To: boost_at_[hidden]
>  Subject: [boost] math_constants parameterisation and return by ref
> 
> 
>  Hi,
> 
>  Have been looking through mathconstants in order to take advantage of
>  the PI functions in function_constants.hpp.
> 
>  Two thoughts have occurred.
> 
>  1) the type of constant could be parameterised, which would help in
>  functionstemplates:
> 
>  current usege of 'pi' in function_constants:
> 
>  q_volume::m3 V1 = 4.0/3.0 * boost::math::double_constants::pi *
>  power<3>(r);
> 
>  Alternative parameterised pi ...useful for template functions:
> 
>  q_volume::m3 V2 = 4.0/3.0 * boost::math::constants<double>::pi *
>  power<3>(r);
>  q_volume::m3 V3 = 4.0/3.0 * boost::math::constants<float>::pi *
>  power<3>(r);
> 
>  2) the value could be returned by constreference.
> 
>  An implementation which does both of these and shouldnt break the original:
>  (tested in gcc3.2 and VC7.1):
> 
>  regards
>  Andy Little
> 
>  
> 
>  #ifndef HPP_FUNCTION_CONSTANTS_BY_REF
>  #define HPP_FUNCTION_CONSTANTS_BY_REF
> 
>  namespace boost{namespace math {
> 
>  template<typename T>
>  struct constants{
>  struct pi_constant
>  {
>  operator const T& ()const;
>  };
>  static pi_constant const pi;
> 
>  /* other constants */
>  };
> 
>  // conv operators
>  template<>
>  inline constants<
>  double
>  >::pi_constant::operator
>  const double&() const
>  { static const double val
>  = 3.141592653589793238462643383279502884197;
>  return val;
>  }
> 
>  template<>
>  inline constants<
>  float
>  >::pi_constant::operator
>  const float&() const
>  { static const float val
>  = 3.141592653589793238462643383279502884197F;
>  return val;
>  }
> 
>  // static members
>  // initialisers reqd which is possibly the problem ? :)
> 
>  template<>
>  constants<double>::pi_constant const
>  constants<double>::pi = constants<double>::pi_constant();
> 
>  template<>
>  constants<float>::pi_constant const
>  constants<float>::pi = constants<float>::pi_constant();
> 
>  }}// boost::math
> 
>  #endif
> 
> 
> 
> 
> 
> 
> 
> 
> 
> 
>  _______________________________________________
>  Unsubscribe & other changes: http://lists.boost.org/mailman/listinfo.cgi/boost
> 
> 
>
> _______________________________________________
> Unsubscribe & other changes: http://lists.boost.org/mailman/listinfo.cgi/boost
>
Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk