Main Content

Call C++ Class Methods Using a C-style Wrapper Function From a C Function Block

This example shows how to use the C Function block to call C++ class methods using a C-style wrapper function. For some C++ classes, such as template classes, the C Function block does not support direct instantiation of class objects or calling of class methods, so it is necessary to use C wrapper functions. See Interface with C++ Classes Using C Function Block. For an example of a C Function block accessing C++ class members and methods directly, see Call C++ Class Methods Directly From a C Function Block.

In this example, the C-style wrapper functions are declared in adder_wrapper.h and implemented in adder_wrapper.cpp.

To run this example model, you must configure MATLAB® to use a C++ compiler. This can be done using the mex -setup command, and selecting a C++ compiler.

To enable calling of the C functions from the C Function block, in the model, specify the header file and the source file in the Simulation Target pane of the Model Configuration Parameters dialog. In this model the custom code header file adder_template.h defines an adder class template along with the class member functions. The header file adder_wrapper.h contains declarations of C-style wrapper functions which are called in the C Function block. The prototypes of the C-style wrapper functions are:

  • void *createAdder()

  • void deleteAdder(void *obj)

  • int adderOutput(void *obj, int increment)

where void *obj is the class object handle and increment is an input used by the adder function.

The createAdder function is called in the Start Code section of the C Function block dialog to construct an object of the adder class. The deleteAdder function is called in the Terminate Code section to destruct the adder class object. In the Output Code section, the adderOutput function is called. In this example the ports of the C Function block are configured as follows:

  • The adder class object, obj, return by the createAdder function, is a Persistent symbol of the C Function block.

  • The input of the C Function block is mapped to increment.

  • The output of the C Function block is mapped to the return value of the adderOutput function.

See Also