|
Boost : |
From: Roland Schwarz (roland.schwarz_at_[hidden])
Date: 2007-10-11 09:25:26
Zara wrote:
> yes, certainly. Just check if the endiannes is the right one, or if
> you must caculate the toal the oother way round.
Thank you.
I have to add:
My example posted was bogus. I just tried to compile and never
instantiated the class. When I did I saw that the compiler complained
anyways. To make it work I had to use:
template<class T>
struct packed
{
unsigned char data[sizeof(T)];
operator T&()
{ return *reinterpret_cast<T*>(data); }
}
And then I looked into the standard:
5.2.10 clause 7:
A pointer to an object can be explicitly converted to an object of
different type.
I think this is my case.
But of course:
.., the result of such a pointer conversion is unspecified.
And this I guess is what you meant.
So I stick with the latter, explicit code.
So the question is left:
unsigned char mem[] = {1,2,3,4,5};
struct foo
{
packed<char> a;
packed<int> b;
};
How do I map my struct to mem avoiding surprise:
foo& f((foo&)(*mem));
I guess this is bad again, as for the very same reasons of unspecified
behaviour, true? At least I cannot use a static_cast instead of (foo&) cast.
Thanks again
Roland aka speedsnail
Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk