Call an overloaded function
dip_DataType ovlDataType = [current data type]; [#define DIP_OVL_ASSIGN [assignment target]] #define DIP_OVL_FUNC [function base name] #define DIP_OVL_ARGS [argument list] #define DIP_OVL_ALLOW [type identifiers] #include "dip_ovl.h"
Call a type specific function based on the data type stored in the ovlDataType variable. The base name of the function is passed to dip_ovl.h by defining DIP_OVL_FUNC. The argument list is passed by defining DIP_OVL_ARGS. By defining DIP_OVL_ALLOW the list of data types for which overloading is possible can be controlled. If DIP_OVL_ALLOW is not defined, all data types are allowed. The list is specified by a logical OR of identifier and identifier group flags, see the table at DIPlib's data types. The code executed by dip_ovl.h is the following:
/* if ovlDataType is in the list specified by DIP_OVL_ALLOW */ DIPXJ( DIP_FUNC(DIP_OVL_FUNC,ovlDataType's extension) DIP_OVL_ARGS ); /* if ovlDataType is not in the list specified by DIP_OVL_ALLOW */ DIPSJ( DIP_E_DATA_TYPE_NOT_SUPPORTED );
DIP_FUNC is described in macros.h. Note that there are no brackets around DIP_OVL_ARGS, so they must be included in DIP_OVL_ARGS itself. If ovlDataType is one of the binary types, DIP_OVL_BINARY_ARGS can be defined to override DIP_OVL_ARGS.
If DIP_OVL_ASSIGN is defined, the following code will be executed by dip_ovl.h instead of the code shown above:
DIP_OVL_ASSIGN DIP_FUNC(DIP_OVL_FUNC,ovlDataType's extension) DIP_OVL_ARGS;
Note that to actually perform an assignment the "=" operator must be included in the definition of DIP_OVL_ASSIGN itself. DIP_OVL_BINARY_ASSIGN overrides DIP_OVL_ASSIGN if ovlDataType is one of the binary data types.