Re: Two Templates
"KevinSimonson" <kvnsmnsn@hotmail.com> wrote in message
news:0692e7ac-70a0-413e-8bf6-33a338312e2a@c10g2000yqh.googlegroups.com...
Can someone tell me what the following code does? The first
"template<typename T, Endianess endianPolicy> struct TransformTo"
makes sense to me, but I don't understand what the "template<typename
T > struct TransformTo< T, Machine::endianess>" does. Also, in the
first one "endianPolicy" is mentioned but never used. So does that
mean including it has no effect? I'm kind of confused on that.
//! \brief Generic function object to give its char serialization a
given
//! specified byte ordering.
//!
//! The byte ordering of the argument is swapped unless it matches the
byte
//! ordering of the target machine.
//! We use partial specialization to achieve this.
template<typename T, Endianess endianPolicy> struct TransformTo
{
T operator()(T value) const { return swapEndianess< T >( value ); }
};
template<typename T > struct TransformTo< T, Machine::endianess >
{
T operator()(T value) const { return value; }
};
Kevin S
Somewhere machine::endianess is defined or typedefed or such to represent a
specific endian policy for that particular machine. The second one is
called a "Template specialiation". If the Endianess does not match
Machine::endianes then the first version of the template will be
called/built that returns the swapped values. However, if the endianPolicy
matches Machien::endianess, then the second template will be called/built
that simply returns the value. If the endianess already matches the
endianess of the machine do nothing.
I am curious, however, why this TransformTo even exists, why that logic
isn't being handled in the tempalte swapEndianess<T> which could do the
exact same thing if the endianess is the same, simply return the value. I
do not know of any other reasoning for specialiazing then leaving it alone,
and that is what swapEndianess<T> should do in the firstplace.
I'm curious what happens if you call swapEndianess< T > with a value with
the same endian policy. swapEndianess is probably interesting to look at
also.