What is the purpose of the narrow() method created for a type by rtiddsgen?
Note: Applies to RTI Connext 4.x and above
The narrow
method is a class-scope method that implements a safe down-cast for a pointer to an RTI Connext entity. It is a type-safe way to cast a pointer. The Java API does not require this method because Java casts are always type-safe.
This method takes a DDSEntity ( DDSDataWriter
, DDSDataReader
, etc.) pointer and casts it to a specific type pointer ( FooDataWriter
, FooDataReader
, etc.). In this case, Foo
is the related data type. The return value from narrow will either be a valid pointer to the requested type, or NULL if the cast is invalid. This will happen for example if FooDataReader::narrow()
is called with a DDSDataReader
pointer to an object that is actually of class BarDataReader
.
The most common usage is in an on_data_available callback for the DataReader:
FooReaderListener::on_data_available(DDSDataReader *reader, ...); FooDataReader *foo_reader = FooDataReader::narrow(reader); ...
Note that there were problems with the narrow method for the built-in data reader classes in the 4.0g release; these were fixed in 4.0i.