The FPInterface
class hierarchy is such that static and mixin interfaces and interface descriptors each have their own types.
FPInterface
The base class for all interfaces, prime client type for using interfacesFPInterfaceDesc
Contains the interface metadataFPStaticInterface
Use as the base class for defining static or core virtual interface classes.FPStaticInterface
Use as the base class for defining static or core virtual interface classes.FPMixinInterface
Use as the base class for defining object-based mixin interface classes, use FPInterfaceDesc
for mixin interface descriptorsFPInterfaceDesc
Contains the interface metadataFPStaticInterface
Use as the base class for defining static or core virtual interface classes.FPStaticInterface
Use as the base class for defining static or core virtual interface classes.FPMixinInterface
Use as the base class for defining object-based mixin interface classes, use FPInterfaceDesc
for mixin interface descriptorsThe FPInterface
class continues to provide all the original method and predicate invocation functions required by an SDK-level client of the interface. A pure virtual method, GetDesc()
, should be used to get the FPInterfaceDesc
instance for the interface. The metadata definition and accessing methods and the metadata data members now all live in the FPInterfaceDesc
.
All the original interface query methods in the API (such as Animatable::GetInterface
( id), ClassDesc2::GetInterface
(id), GetCOREInterface
( id)) still return FPInterface
pointers, so you would use GetDesc()
in constructs like the following to get at an interface's metadata:
FPInterface* fpi = GetCOREInterface(FOO_INTERFACE);
TCHAR* iname = fpi->GetDesc()->internal_name.data();
The FPInterface::GetDesc()
method has a default implementation in FPInterfaceDesc
(and so FPStaticInterface
), simply returning 'this', since instances of these classes contain the metadata). FPMixinInterface
subclasses provide implementations of GetDesc()
, returning their associated FPInterfaceDesc
instance.