
Boost : 
From: Andy Little (andy_at_[hidden])
Date: 20041105 08:50:33
Hi again,
Thanks to everyone who has returned comments on the pqs library.
My current instinct is not to put it forward as a boost proposal at this
time. Having worked on the library for some time I have found it an
interesting project., however the recurrent theme from the feedback is that
the documentation needs to be much clearer. I also think I need to
demonstrate application areas. IOW are physical quantities a practical
proposition? Compile time dimensional analysis is a great example for
showing of C++ at its best. However I do often ask myself the question as to
whether this is 'showing off ' for academic interest rather than
practicality. IOW once one starts to use a physicalquantity type, one soon
finds that it becomes impossible to 'mesh' the type with other libraries.
Examples here are std::complex and matrices. In both cases it requires a
reimplementation to account for the different return types. Another issue is
that the physical quantity type is restricted to compiletime. A runtime
type is certainly possible though it would be considerably larger as it
would need to carry the dimension and unit information along with it at run
time.
IOW a collection of types representing physicalquantities does not seem to
be complete without being based in a much larger framework, with a lot more
utilities.
Perhaps this is an example of taking strong type checking too far, and may
be the reason that a physical quantities library will not become a practical
proposition.
Whatever.. the library is certainly a facinating curiosity at least, and my
curiosity as to where it will lead is not diminished. Here for example are a
couple of types representing homogeneous vectors and transformation matrices
for 2D transforms. Note that operations such as concatenation, determinant,
cofactor and inverse all work satisfactorily within the strong type
checking:
PQ == the physicalquantity parameter type ( eg length::m)
K/PQ == the 'reciprocal' of the type ( eg reciprocal_length::div_m }
N == numeric type ( eg double)
rc_matrix<PQ>( // 2D transformation matrix laid out in row/column format
//using a tuple of tuples
N, N, K/PQ,
N, N, K/PQ,
PQ, PQ, N
);
row_vector<PQ>( // 2D vertex in homogeneous coordinates implicit
//conversion to/from x,y vertex<PQ>.
N, N, K/PQ
);
regards
Andy Little
Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk