How to call object methods with c++ engine api?
3 views (last 30 days)
Show older comments
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"addpath 'path/to/folder/with/class.m'");
matlab->eval(u"processor = Processor");
After that, I'm not sure what to do. I tried using
matlab->feval<int>(u"processor.add_simple");
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")
instance->call_method("method_name", args)
or
matlab->call_instance_method(instance, "method_name", args)
What is the correct way of using C++ Engine Api with class instances?
0 Comments
Answers (1)
Ramtej
on 6 Sep 2023
Edited: Ramtej
on 6 Sep 2023
Hi Kyösi,
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!
0 Comments
See Also
Categories
Find more on Startup and Shutdown in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!