73 lines
1.8 KiB
C++
73 lines
1.8 KiB
C++
// The contents of this file are in the public domain. See LICENSE_FOR_EXAMPLE_PROGRAMS.txt
|
|
/*
|
|
This mex file will create a MATLAB function called example_mex_class. If you call it
|
|
with no arguments it will output the MATLAB .m code to create a MATLAB wrapper class.
|
|
Paste that code into a .m file. Then you will be able to work with this C++ class
|
|
directly in MATLAB.
|
|
*/
|
|
|
|
#include <iostream>
|
|
#include <dlib/matrix.h>
|
|
|
|
|
|
using namespace std;
|
|
using namespace dlib;
|
|
|
|
class example_class
|
|
{
|
|
public:
|
|
|
|
// The class must have a default constructor. It's also the only kind of constructor
|
|
// you can call from MATLAB.
|
|
example_class()
|
|
{
|
|
xx.set_size(3,2);
|
|
xx = 1;
|
|
}
|
|
|
|
// The rest of the member functions that you want to bind have to return void and
|
|
// generally have the same syntax limitations as regular mex funcitons.
|
|
void do_stuff(const matrix_colmajor& x)
|
|
{
|
|
cout << "in do_stuff" << endl;
|
|
cout << x << endl;
|
|
xx = x;
|
|
}
|
|
|
|
void do_other_stuff(int x)
|
|
{
|
|
cout << "in do_other_stuff" << endl;
|
|
cout << "x: " << x << endl;
|
|
}
|
|
|
|
void print_state()
|
|
{
|
|
cout << xx << endl;
|
|
}
|
|
|
|
// saveobj() and load_obj() are special functions. If you provide these then you will
|
|
// be able to save() and load() your objects using MATLAB's built in object
|
|
// serialization.
|
|
void saveobj(matrix_colmajor& state)
|
|
{
|
|
// save this object's state to state.
|
|
state = xx;
|
|
}
|
|
void load_obj(const matrix_colmajor& state)
|
|
{
|
|
xx = state;
|
|
}
|
|
|
|
private:
|
|
matrix_colmajor xx;
|
|
};
|
|
|
|
// Just tell the mex wrapper the name of your class and list the methods you want to bind.
|
|
#define MEX_CLASS_NAME example_class
|
|
#define MEX_CLASS_METHODS do_stuff, do_other_stuff, print_state, saveobj, load_obj
|
|
|
|
|
|
#include "mex_wrapper.cpp"
|
|
|
|
|