Ovanes Markarian wrote:
Edward,
Just wanted to add my 2 cent. That might help. You need ::type when you do type calculations. For example:
Access the type stored in a type sequence -> ::type
OK
transform type sequence to another type sequence -> ::type
OK
So meta-algorithms operate on types and result in new types -> ::type
There is nothing in the book or documentation reference about "meta-algorithms", whatever they are.
You don't need ::type when you pass parameters or transport the contained type(s), e.g.
What do you mean by the above ?
Placeholder transports type parameter to a metafunction -> no ::type
OK.
vector of type passed to a metafunction also transports type(s) -> no ::type
OK
Hope that helps.
It helps a little but it does not break the two general cases in my mind into all the specific instances of using mpl constructs in the reference. I am gathering that the correct specific way to determine whether or not to append "::type" is to look at the mpl construct and if it is a metafunction, which has its own nested type, always append "::type". More general rules regarding categories of decision about appending "::type", as you have suggested above, seem very vague to me except in specific cases which Steve and you have mentioned. Eddie
Ovanes
P.S. sorry that I did not remove unrelated posting lines.
On Tue, May 6, 2008 at 9:44 PM, Steven Watanabe
mailto:watanabesj@gmail.com> wrote: AMDG
Edward Diener wrote: > I understand the explanation about how placeholders work. The rule you > are specifying appears to be that one never adds the '::type' to the end > of a placeholder expression when it is being passed to an mpl construct. > Is that correct ? >
You should never add ::type to a placeholder expression at all. Otherwise, the metafunction will probably get very confused.
> I wish I knew what the is an mpl function as opposed to what is not an > mpl function. Perhaps the mpl algorithms are the mpl functions and > everything which is not an algorithm is not an mpl function. >
Inserters, Sequences, and the types listed under "Data Types" are not metafunctions. Everything listed in a section with Metafunctions of Algorithms in its name are metafunctions.
>> If your not >> sure, the >> only thing to do is look it up. >> > > Look up what ? Where in the reference documentation does it tell me > whether I need to add '::type' to the end of an mpl construct ? >
Here are two examples from the reference:
template< typename Sequence , typename State , typename ForwardOp > struct accumulate <./accumulate.html> { typedef /unspecified/ type; };
template< typename Seq > struct back_inserter <./back-inserter.html> { // /unspecified/ // /.../ };
In Christ, Steven Watanabe
------------------------------------------------------------------------
_______________________________________________ Boost-users mailing list Boost-users@lists.boost.org http://lists.boost.org/mailman/listinfo.cgi/boost-users