Boost Users :
From: Joel FALCOU (joel.falcou_at_[hidden])
Date: 2008-06-01 04:25:03
> What exactly is missing? Is there any particular reason it can't be
> added as free functions?
Well, basically :
- a large number of classic mathematic functions.
- a real default constructor. Initialising complex<T> to (T(0),T(0))
- automatic conversion between complex of different base types
and overload support for complex/scalar interaction
complex<float> e(d); // Error : error: no matching function for call
// to 'complex<float>::complex(complex<int>&)'
c = a+3.f; // works
c = a+3; // Error : no match for 'operator+' in 'a + 3'
c = a+b; // Error : no match for 'operator+' in 'a + b'
As you said, most of them can be fixed through free function ( the
operator overload, the additional math function) and that's what I did
for some of my code, but the lack of proper constructors and operator=
seems to need some intrusive code fixes.
Maybe it's just me that have strange request or write strange code, but
it feels strange and counterintutive that the std::complex genericiy is
not generic enough : I don't see what's different between adding a float
and a double (returning a double) and adding a complex of float and a
complex of double (returning a complex<double>).
On a side note, some other improvements can be added :
- a imaginary<T> class is a possible addition (as long as complex and
imaginary interacts together correctly) for some computation. It's only
a matter of sparing 4-10 cycles here and there on basic operations.
- meta-function that computes types related to complex<T> (as suggested
by the original author) like T<->complex<T>, complex types promotions,
Anyway, not sure it warrants a library by itself but I feel those small
additions can be interesting.
-- Joel FALCOU Research Engineer @ Institut d'Electronique Fondamentale Université PARIS SUD XI France
Boost-users list run by williamkempf at hotmail.com, kalb at libertysoft.com, bjorn.karlsson at readsoft.com, gregod at cs.rpi.edu, wekempf at cox.net