MATLAB coder: use constructor instead of init method

9 visualizaciones (últimos 30 días)
Brandon
Brandon el 17 de Nov. de 2023
Comentada: PK el 28 de Feb. de 2024
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.

Respuestas (1)

Varun
Varun el 28 de Nov. de 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:
  1. Open the generated C++ files (".cpp" and ".h") and locate the constructor ("A::A"). Adjust the constructor to initialize the properties directly:
// 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 comentarios
Brandon
Brandon el 28 de Nov. de 2023
Not interested in modifying generated code; that's not really sustainable in CI.
Mathworks documentation indicates that this init method is just how things get done. Looks like if I want a more modern styled class I'll have to wrap the generated code.
PK
PK el 28 de Feb. de 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?

Iniciar sesión para comentar.

Categorías

Más información sobre MATLAB Coder en Help Center y File Exchange.

Etiquetas

Productos


Versión

R2023a

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by