
Boost : 
From: Peter Dimov (pdimov_at_[hidden])
Date: 20070216 14:25:22
> Matthias Schabel <boost <at> schabelfamily.org> writes:
>> But in general we should assume that constructs like this are legit:
>>
>> quantity<SI::volume>
>> V(1.0*SI::meters*imperial::feet*CGS::centimeters);
>>
>> where the system of the result type defines the conversions
>>
>> imperial::feet>SI::meters
>> CGS::centimeters>SI::meters
>>
>> to get the conversion factor...this is unambiguous in all cases,
>> AFAICS.
This is possible, but is it a good idea? In C++ expressions are
contextindependent; that is, x * y * z * w always has a specific type T,
regardless of whether it's assigned to an int, used to construct a
quantity<SI::volume>, passed to a function taking double, or passed to a
function template taking X const& x, where X is a template parameter. This
has the advantage that it scales well. Consider
( 1.0 * SI::meters + 1.0 * imperial::feet ) * ( 2.0 * CGS::centimeters + 1.0
* imperial::feet )
and other complex expressions. Pushing down a result type may be hard. If
your result type is nautical::miles * imperial::miles, how do you decide
which of the two branches needs to get the nautical::miles? And this is a
relatively simple example.
Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk