Boost logo

Boost :

From: Martin Bonner (martin.bonner_at_[hidden])
Date: 2006-09-22 09:52:11


----Original Message----
From: Sohail Somani

>
> Marcus Lindblom wrote:
>>
>> Olivier Grant wrote:
>>> I agree on your point, on the other hand, you can do this :
>>>
>>> class vector3d
>>> {
>>> public:
>>> float x, y, z;
>>>
>>> float operator[]( int index ) const
>>> { return ((float *)this)[index]; }
>>>
>>> float & operator[]( int index )
>>> { return ((float *)this)[index]; }
>>>
>>> /* ... */
>>> };
>>>
>>> in which case "v.x" and "v[0]" are the same thing. this is what I
>>> currently have. Now some people will argument its a hack maybe.
>>>
>> I've sometimes done just:
>>
>> class vector3d
>> {
>> public:
>> float x, y, z;
>>
>> float operator[]( int index ) const
>> { return (&x)[index]; }
>>
>> /* ... */
>> };
> Won't that not work in the presence of padding?
In theory, yes. In practice, I can't see why any compiler would bother
adding such padding.

A more serious problem is if you start mixing usages. A compiler is
quite likely to assume that assignments through the result of the index
operator don't affect .y or .z, and optimize on that basis.

> Sorry for the TP, lookout webmail.
Reformatted :-)

-- 
Martin Bonner
Martin.Bonner_at_[hidden]
Pi Technology, Milton Hall, Ely Road, Milton, Cambridge, CB4 6WZ,
ENGLAND Tel: +44 (0)1223 203894

Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk