<br><font size=2 face="sans-serif">Hello,</font>
<br>
<br><font size=2 face="sans-serif">I have read the &quot;Mapping for Union
Types&quot; available on the omg website http://www.omg.org/spec/CPP/1.2/PDF/</font>
<br><font size=2 face="sans-serif">(and honestly I'm not sure I understand
it completly)</font>
<br>
<br><font size=2 face="sans-serif">Here's an IDL I have to use :</font>
<br>
<br><font size=2 face="sans-serif">&nbsp; enum MyEnum</font>
<br><font size=2 face="sans-serif">&nbsp; {</font>
<br><font size=2 face="sans-serif">&nbsp; &nbsp; myEnum1,</font>
<br><font size=2 face="sans-serif">&nbsp; &nbsp; myEnum2</font>
<br><font size=2 face="sans-serif">&nbsp; };</font>
<br>
<br><font size=2 face="sans-serif">&nbsp; union MyUnion switch(MyEnum)</font>
<br><font size=2 face="sans-serif">&nbsp; {</font>
<br><font size=2 face="sans-serif">&nbsp; &nbsp; case myEnum1: LightweightObject
lightweight;</font>
<br><font size=2 face="sans-serif">&nbsp; &nbsp; case myEnum2: FatObject
fat;</font>
<br><font size=2 face="sans-serif">&nbsp; };</font>
<br>
<br><font size=2 face="sans-serif">I don't have a control over it and I
need to allocate a sequence of it (possibly long).</font>
<br>
<br><font size=2 face="sans-serif">Basically, this is what I would like
to write : (#1)</font>
<br><font size=2 face="sans-serif">&nbsp; MyUnion &amp;union = seq[no];
// seq is a sequence of MyUnion</font>
<br><font size=2 face="sans-serif">&nbsp; union._d(myEnum2); // oops, discriminant
not initialized yet</font>
<br><font size=2 face="sans-serif">&nbsp; FatObject &amp;fat = union.fat();</font>
<br><font size=2 face="sans-serif">&nbsp; initializeFat(fat);</font>
<br>
<br><font size=2 face="sans-serif">But it does not work, the correct compliant
way is : (#2)</font>
<br><font size=2 face="sans-serif">&nbsp; MyUnion &amp;union = seq[no];
// seq is a sequence of MyUnion</font>
<br><font size=2 face="sans-serif">&nbsp; FatObject fat;</font>
<br><font size=2 face="sans-serif">&nbsp; initializeFat(fat);</font>
<br><font size=2 face="sans-serif">&nbsp; union.fat(fat); // initialize
discriminant and performs deep copy</font>
<br>
<br><font size=2 face="sans-serif">Is there any way to avoid the deep copy
? It can be costly if the sequence is very long.</font>
<br><font size=2 face="sans-serif">Is there any good reason the spec disallow
writing code #1 ?</font>
<br>
<br><font size=2 face="sans-serif">Looking at the code generated by omniidl,
it would be completly possible and safe to do it in the #1 way, but I would
have to manually patch the generated code to explictly allow it.</font>
<br><font size=2 face="sans-serif">Any thought about it ?</font>
<br>
<br><font size=2 face="sans-serif">Tx</font>
<br>
<br><font size=2 face="sans-serif">David</font>
<br><pre>

This message and any attachments (the "message") is intended solely for 
the addressees and is confidential. If you receive this message in error, 
please delete it and immediately notify the sender. Any use not in accord 
with its purpose, any dissemination or disclosure, either whole or partial, 
is prohibited except formal approval. The internet can not guarantee the 
integrity of this message. BNP PARIBAS (and its subsidiaries) shall (will) 
not therefore be liable for the message if modified. Please note that certain 
functions and services for BNP Paribas may be performed by BNP Paribas RCC, Inc.</pre>