
Andy Little wrote:
"Pedro Lamarão" wrote
I would like to see some "motivating example", like this one from the MPL documentation:
http://www.boost.org/libs/mpl/doc/tutorial/tutorial-metafunctions.html
If the above is a motivating example for mpl, then I dont think it is the best one. The problem is even highlighted in:
http://www.boost.org/libs/mpl/doc/tutorial/implementing.html
At the point in the text where it says;
" However, if we try to write:
quantity
f = m * a; we'll run into a little problem. ".
The problem is that mpl doesnt work as the (naive?) user expects, but worse the actual type of the quantity resulting from a multiplication isnt exactly defined. All that is known about it is that its dimension is comprised of "some sequence". In practise I found this, which was described as a convenience feature actually caused a great deal more work in the implementation. It also causes problems with trying to figure what to register with Boost.Typeof and I suspect that it would continue to throw up similar problems whenever the type is required to be known. The fact is that an interface must have exactly predictable types. The interface in this case ( The visible part. e.g for use in function signatures etc) is in the template signature of the class. IMO mpl isnt the best way to implement the dimension of a quantity for this reason.
I am sorry to go on about this, but I am expecting to have a boost review of my pqs library shortly and the issue is bound to come up. I suspect that the fact that it doesnt use mpl will be seen by the naive ( in the same sense as used above) user as a shortcoming of pqs. I believe that for this useage the shortcoming is rather in mpl for this particular useage, which the above example demonstrates.
So MPL is not sequence preserving after all. transform merely returns a sequence with the same properties as the original. This makes perfect sense. In Fusion, algorithms are not sequence preserving by design. However, we do have conversion functions/metafunctions to get a *true* vector/list/set/map from an arbitrary sequence. I think that's all that MPL needs to provide to solve the problem you mention. Regards, -- Joel de Guzman http://www.boost-consulting.com http://spirit.sf.net