-
Key: CPP1114-14
-
Status: closed
-
Source: ZettaScale Technology ( Mr. Erik Hendriks)
-
Summary:
The C++11 mapping of an IDL union seems to follow that of the classic C++ mapping, where the discriminator does not only have a getter-operation, but also a setter operation. This operation has been added for situations where more than one case label applies to to the same union branch, and the setter operation for that union branch implicitly sets the discriminant value to the first case label that was specified. If you want to pick another value, you should do so by invoking the setter function for the discriminant.
However, this setter operation is confusing to many users, and some seem to think you need to use it every time you passed a value into a branch different than the current branch. On top of that. it seems cumbersome to have to make two separate method invocations to request a single modification that is intended to set branch value and corresponding discriminator value atomically.
Much better would be to take the route that has been adopted in the Java language mapping for the union: if there is more than one case label that applies to a union branch, you add an overloaded setter method for that branch that does not only allow you to pass the value for that branch, but also the value for the discriminator. This overloaded setter function will than validate whether the discriminant value you pass actually applies to the branch that you are trying to set.
-
Reported: CPP11 1.3 — Tue, 25 Sep 2018 20:14 GMT
-
Disposition: Resolved — CPP11 1.4
-
Disposition Summary:
Unions: Provide a way to set both the discriminator and value at the same time
Enhance the mapping of IDL union to allow setting the discriminator at the same time a new union element value is provided. This change maintains compatibility for applications written to the current spec version.
-
Updated: Mon, 1 Apr 2019 18:18 GMT
CPP1114 — Remove the setter operation for the discriminator of a union
- Key: CPP1114-14
- OMG Task Force: IDL to C++11 1.4 RTF