How to call object methods with c++ engine api?
14 views (last 30 days)
I'm using C++ Engine Api to call MATLAB code from C++. I want to create an instance of a MATLAB class from C++ and call its methods. How can I achieve this?
Currently, I'm using this kind of approach to create the instance (Processor is the name of class I'm trying to use):
matlab = matlab::engine::startMATLAB();
matlab->eval(u"processor = Processor");
After that, I'm not sure what to do. I tried using
but I only get error Unrecognized function or variable 'processor.add_simple'.
There seems also to be matlab->getProperty and matlab->setProperty methods, but I want to get methods instead of properties.
Furthermore, the whole approach of using eval to create the instance seems pretty cumbersome. Is there a way to instantiate the class directly from c++, perhaps something like this:
auto instance = matlab->create_instance("class_name")
matlab->call_instance_method(instance, "method_name", args)
What is the correct way of using C++ Engine Api with class instances?
Ramtej on 6 Sep 2023 at 12:20
Edited: Ramtej on 6 Sep 2023 at 12:20
I understand that you are trying to call object methods with c++ engine api.
The error " Unrecognized function or variable 'processor.add_simple' " occurred because "feval" assumes "processor.add_simple" as the name of the function you are trying to call.
To call object methods follow the steps below:
%create an object handle for your class object
matlab::data::Array objHandle = matlabPtr->getVariable(u"processor"); % 'processor' in your case
% pass this object handle as an input to the object method you are trying
% to call. You are invoking the object method by evaluating "processor(add_simple)" which is
% equivalent to "processor.add_simple"
matlab::data::Array results = matlabPtr->feval(u"add_simple", objHandle);
If your object method ("add_simple") accepts any input variables other than object ("processor") itself which should be passed by default, refer to "feval" documentation for detailed instructions on how to evaluate MATLAB functions with input arguments.
Link to the documentation: https://in.mathworks.com/help/matlab/apiref/matlab.engine.matlabengine_cpp.html#bvkfuut-8
Hope this resolves you query!