|
Boost : |
From: Thorsten Ottosen (nesotto_at_[hidden])
Date: 2004-03-01 08:12:56
>With no offense intended, but that's a very simple version which doesn't
>work in many situations. The problems of your solution are:
>
>- Doesn't work well for UDTs (try std::complex, some conversions are
> ambiguous then)
What rule of the language prohibit this conversion? My vc71 compiler can do
it, como and g++
cannot.
>- Doesn't scale for new types (you need to know all of them in the
> single header that defines the constant)
You could add the overloads with eg a macro in your own header. What should
hinder this?
>- Doesn't work for more complex expressions (pi*pi*t instead of T(pi)*pi*t)
true, but what precision does pi*pi have? IMO, it's good to have that
information in the code.
>- Doesn't work for function calls (srqt(pi)*t instead of sqrt(T(pi))*t)
again it a matter of being explicit about which overloaded version you want
to call;
therefore one would always add T().
>- Doesn't solve the naming dilemma (how to spell the constant "pi*pi"?)
is pi_square that bad?
>- Doesn't work well with unit libraries AFAICS (again not scaling well)
how?
>I really suggest you look at my code at
><http://groups.yahoo.com/group/boost/files/MathConstants/>, which solves
>all of the above points. Feel free to ask questions.
Is there any documentation?
>From your example file:
std::cout << pi.get< float >() << std::endl;
which is float( pi ) spelt more elaborate.
std::cout << pi + pi - pi * pi / pi + d << std::endl;
how often does such an expression occur in practice? Afterall, a single pi
would do.
std::cout << sqrt( sqrt( two + pi ) ) + d << std::endl;
will everything left of d be a constant? If so, what would the point be?
Thanks
Thorsten
Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk