13.1.25.6 Handling Untyped Values
Under some circumstances the type-safe interface to Any is not sufficient. An example is a situation in which data types are read from a file in binary form and are used to create values of type Any. For these cases, the Any class provides a constructor with an explicit TypeCode and generic pointer:
// C++
Any(TypeCode_ptr tc, void *value, Boolean release = FALSE);
The constructor duplicates the given TypeCode pseudo-object
reference. If the release
parameter is
TRUE
, the Any object assumes ownership of the storage
pointed to by the value
parameter. A caller must make
no assumptions about the continued lifetime of the
value
parameter once it has been handed to an Any with
release=TRUE
, since the Any may copy the
value
parameter and immediately free the original
pointer. If the release
parameter is
FALSE
(the default case), the Any object assumes that
the caller manages the memory pointed to by value
. The
value
parameter can be a NULL pointer.
The Any class also defines three unsafe operations:
// C++
void replace(
TypeCode_ptr,
void *value,
Boolean release = FALSE
);
TypeCode_ptr type() const;
const void *value() const;
The replace
function is intended to be used with types that cannot be used with the type-safe insertion interface, and so is similar to the constructor described above. The existing TypeCode is released and value storage is deallocated, if necessary. The TypeCode function parameter is duplicated. If the release
parameter is TRUE
, the Any object assumes ownership for the storage pointed to by the value
parameter. The Any must make no assumptions about the continued lifetime of the value
parameter once it has been handed to the Any::replace
function with release=TRUE
, since the Any may copy the value
parameter and immediately free the original pointer. If the release
parameter is FALSE
(the default case), the Any object assumes that the caller manages the memory occupied by the value. The value
parameter of the replace
function can be a NULL pointer.
Note:
Neither the constructor shown above nor thereplace
function is type-safe. In particular, no guarantees are made by the compiler at run time as to the consistency between the TypeCode and the actual type of the void*
argument. The behavior of an ORB implementation when presented with an Any
that is constructed with a mismatched TypeCode and value is not defined.
The type
function returns a TypeCode_ptr
pseudo-object reference to the TypeCode associated with the Any. Like all object reference return values, the caller must release the reference when it is no longer needed, or assign it to a TypeCode_var
variable for automatic management.
The value
function returns a pointer to the data
stored in the Any. If the Any has no associated value, the
value
function returns a NULL pointer.
Parent topic: Any Type