- Open the generated C++ files (".cpp" and ".h") and locate the constructor ("A::A"). Adjust the constructor to initialize the properties directly:
MATLAB coder: use constructor instead of init method
8 views (last 30 days)
Show older comments
Using MATLAB Coder (C++), both of these classes:
classdef A
properties
x = 1;
end
end
classdef A
methods
function obj = A()
obj.x = 1;
end
end
end
result in a class A with an empty default ctor, and and init method (that sets x=1), where, clearly(?) the intent is to default construct with x=1 (and not split initialization and construction)
Can I disable the generation of the init method in general? That seems IMO like programming C-style with C++ classes as a little bit of syntaxtic sugar.
0 Comments
Answers (1)
Varun
on 28 Nov 2023
Hi Brandon,
I understand that you do not want “init” method explicitly to initialize the properties rather there should be a default constructor that does this initialization.
MATLAB Coder often generates “init” function for properties even if they are set in the constructor in MATLAB. This is the default behaviour of MATLAB Coder while converting a MATLAB class into C++ class. However, you can manually modify the generated C++ code to initialize properties directly in the constructor, aligning it with typical C++ class behavior.
Please follow below steps:
// A.cpp
#include "A.h"
// Constructor
A::A()
{
// Initialize properties directly
x = 1;
}
2. Recompile the modified C++ code using your preferred C++ compiler. Since you have modified the generated code, and you should carefully review and test the modified code to ensure correctness.
Please refer to the following documentation to learn more about generating C++ classes from MATLAB classes:
Hope this helps.
2 Comments
PK
on 28 Feb 2024
Is this still the accepted answer? The generated C++ code does not seem to follow modern C++ coding guidelines. I feel like a much better solution is simply not to use the code generator due to the poor quality of code that is generated. Is anyone working on actually generating modern, efficient C++ code?
See Also
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!