Pass struct Parameter
You can pass a MATLAB® structure as a parameter to a C++ function. The MATLAB interface to the C++ library converts the
structure to a C++ struct argument. Likewise, you can configure a C++
function to return a C++ struct as a MATLAB structure. The MATLAB structure must meet these requirements.
The structure contains all the fields of the C++ structure definition.
The field names of the structure must exactly match the field names of the C++ structure. Field names are case-sensitive.
The MATLAB structure cannot contain fields that are not in the C++ structure.
The data type for each field value must be a valid type for the matching field in the C++ structure.
The size of the field value must match the C++ data member size.
Return MATLAB struct Example
This example shows how to configure an interface to functions that return a struct
as either a C++ struct of type A or as a MATLAB struct.
Display Help for struct Example
Suppose that you have an interface defined by this code with functions
returnClib and returnMATLABStruct that
return a struct A.
struct A { int I; };
A returnClib();
A returnMATLABStruct();To run this example, follow the instructions in Build Interface for struct Example to
generate a MATLAB interface named lib.
When you display help for lib, you see that it contains a
class A and functions returnClib and
returnMATLABStruct.
help clib.libClasses contained in clib.lib: A - clib.lib.A Representation of C++ class A. Functions contained in clib.lib: returnMATLABStruct - clib.lib.returnMATLABStruct Representation of C++ function returnMATLABStruct. returnClib - clib.lib.returnClib Representation of C++ function returnClib.
Display help for the functions.
help clib.lib.returnMATLABStructreturnMATLABStruct - clib.lib.returnMATLABStruct Representation of C++ function returnMATLABStruct.
RetVal = clib.lib.returnMATLABStruct
Output Arguments
RetVal struct with fields:
I int32help clib.lib.returnClibreturnClib - clib.lib.returnClib Representation of C++ function returnClib.
RetVal = clib.lib.returnClib
Output Arguments
RetVal clib.lib.A Display help for A.
help clib.lib.AA - clib.lib.A Representation of C++ class A.
struct with fields:
I int32Call returnMATLABStruct and returnClibreturnMATLABStruct
The returnMATLABStruct function returns an object you can
use as a MATLAB struct.
mobj = clib.lib.returnMATLABStruct
mobj =
struct with fields:
I: 10The returnClib function returns an object of struct
A. You can pass this object to other functions in the
library that accept A parameters.
cobj = clib.lib.returnClib
cobj =
A with properties:
I: 10Build Interface for struct Example
This C++ code defines two functions that return struct
A.
#include <utility>
struct A { int I; };
A returnClib(){
A a1{10};
return std::move(a1);
};
A returnMATLABStruct(){
A a1{10};
return std::move(a1);
};Save this code in a header file named lib.hpp, then
generate a library definition file for a MATLAB interface named lib following the instructions
in Header-Only HPP File.
For this example, edit the library definition file
definelib.m and define the return arguments
RetVal as:
returnClibfunction—By default, the<MLTYPE>is"clib.lib.A". Do not edit this value.returnMATLABStructfunction—Change the<MLTYPE>from"clib.lib.A"to"struct".
| Library Artifacts | MATLAB Interface
libname | MATLAB Help |
|---|---|---|
Header file |
|
|
Pass nullptr Parameter Example
This example shows how to assign nullptr values to a
MATLAB struct to pass to a function in a C++
library.
Display Help for clib.libnullptr
Suppose that you have an interface with the struct definition
MyStruct. To run this example, follow the instructions in
Build Interface for nullptr Example to
generate a MATLAB interface named libnullptr.
When you display help for libnullptr, you see that it
contains classes MyStruct and
Inner.
help clib.libnullptrClasses contained in clib.libnullptr: Inner - clib.libnullptr.Inner Representation of C++ class Inner. MyStruct - clib.libnullptr.MyStruct Representation of C++ class MyStruct.
Display the help text for MyStruct.
help clib.lib.MyStructMyStruct - clib.lib.MyStruct Representation of C++ class MyStruct.
struct with fields:
in1 struct with fields:
i int32
in2 2 element vector struct with fields:
i int32
Documentation for clib.lib.MyStructDisplay the help text for Inner.
help clib.lib.InnerInner - clib.lib.Inner Representation of C++ class Inner.
struct with fields:
i int32
Documentation for clib.lib.InnerSet Pointer Fields to nullptr
Create a MATLAB object myStruct. Use single quotes to assign an
empty value to the char* field str.
myStruct.str = '';Assign empty to numeric field x.
myStruct.x = int32.empty;
Assign [] to struct pointer data member
in1.
myStruct.in1 = struct([]);
Alternatively, you can assign empty to the field.
myStruct.in1 = struct.empty;
Create an object.
obj = clib.libnullptr.MyStruct(myStruct)
obj =
MyStruct with properties:
str: [0×0 string]
x: [1×1 clib.array.lib.Int]
in1: [1×1 clib.lib.Inner]You can convert this C++ struct with pointer fields set to
nullptr to a MATLAB structure mlStruct using the
struct function.
mlStruct = struct(obj)
mlStruct = struct with fields:
str: ''
x: []
in1: [1×1 struct]Build Interface for nullptr Example
This C++ code defines MyStruct with data members that point
to struct Inner:
#include <stdint.h>
struct Inner { int i; };
struct MyStruct {
char *str;
int32_t *x;
Inner *in1;
};Save this code in a header file named MyStruct.hpp, then
generate a library definition file for a MATLAB interface named libnullptr following the
instructions in Header-Only HPP File.
The MyStruct class needs definition based on your
implementation. For this example, edit the library definition file
definelibnullptr.m and define the input arguments
as:
Argument
str—Set<MLTYPE>to"string"and<SHAPE>to"nullTerminated".Argument
x—Set<MLTYPE>to"clib.array.lib.Int32".Argument
in1—Set<MLTYPE>toclib.lib.Inner.
| Library Artifacts | MATLAB Interface
libname | MATLAB Help |
|---|---|---|
Header file
|
|
|