C++ Generator

The C++ code generator is a plug-out directly written in C++ (the C++ code generator does not generate itself !).

The generated sources follows the definition made in BOUML at the artifact / class / operation / relation / attribute / extra member levels.

When the code generation is applied on a artifact associated to several classes, the code generation is made for all these classes. Nevertheless the C++ code generator produce first the code in memory and update the appropriate files only when it is necessary, to not change the last write date of the files for nothing. Depending on the toggle verbose code generation of the global menu Languages the code generator is verbose or not.

The C++ code generator plug-out may be called on :

When the C++ code generator is ask through the Tools menu, it is applied on the project, then on all the artifacts.

The name of the generated files depend on the artifact name, the extension depend on the language and is fixed for each by the generations settings (see below), the directory where the files are generated may be set in each package containing directly or indirectly the artifact (see generation directory).

artifact

The C++ definition of a artifact is set through the C++ header and C++ source tabs of the artifact dialog.

The code generation depend on the stereotype of the artifact :

artifact header C++

The generated file name is the artifact's name with the extension specified in the first C++ tab of the generations settings :

In BOUML the generated code is obtained by the substitution of macros in a text, the macros known by the C++ code generator are :

Note : the generation settings allows to choose between four ways to produce #include :

When inline force include in header is set the types referenced in the profile of the inline operations produce includes in the header, else the code generator doesn't take care if there are inline operations to compute dependencies

artifact source C++

The generated file name is the artifact's name with the extension specified in the first C++ tab of the generations settings.

In BOUML the generated code is obtained by the substitution of macros in a text, the macros known by the C++ code generator are :

Class

The C++ definition of a class is set through the Uml, Parametrized, Instantiate and C++ tabs of the class dialog.

A C++ type definition may be a class, a struct, an union, an enum, a class enum, a template or a template typedef, depending on the stereotype and its translation in C++ (see generation settings).

In BOUML the generated code is obtained by the substitution of macros in a text, the macros known by the C++ code generator are :

In the special case where the class is declared external, its C++ type declaration must contains at least one line indicating how the name of the class is generated, the other lines will be added in the header file of the components referencing the class. By default the first line only contain ${name} meaning that the name is produced unchanged, the only allowed keywords are ${name}, ${Name} and ${NAME}. For instance you want to define the external class string and you want to automatically generate #include <string> followed by using namespace std; you just have to create the class string, to set it external in C++ and to have the declaration form :

${name}

#include <string>

using namespace std;

If you don't want to use the namespace and ask to write std::string the declaration must be :

std::${name}

#include <string>

Operation

The C++ definition of an operation is set through the Uml and C++ tabs of the operation dialog.

The indentation of the first line of the declaration/definition give the indentation added to the visibility specification in the class definition for all the operation declaration/definition (except for the pre-processor forms beginning by # whose are placed at the beginning of the line).

In BOUML the generated code is obtained by the substitution of macros in a text, the macros known by the C++ code generator are :

If the toggle preserve operations's body is set through the Languages menu, the generators do not modify the body of the operations protected by dedicated delimiters. This means that for them the body definition set through BOUML is not used. The first time you generate the code with the toggle set, because the delimiters are not yet present in the generated code, the operation's body will be updated depending on their definition under BOUML. After, while the toggle is set and the delimiters present, the bodies will not change, allowing you to modify them out of BOUML.

Notes :

Attribute

The C++ definition of an attribute is set through the Uml and C++ tabs of the attribute dialog.

The indentation of the first line of the definition give the indentation added to the visibility specification in the class definition for all the attribute definition (except for the pre-processor commands beginning by # whose are placed at the beginning of the line).

An attribute may be a standard attribute or the item of an enumeration.

standard attribute

In BOUML the generated code is obtained by the substitution of macros in a text, the macros known by the C++ code generator are :

enumeration item

The macros known by the C++ code generator are :

Relation

The C++ definition of a relation is set through the Uml and C++ tabs of the relation dialog.

The indentation of the first line of the definition give the indentation added to the visibility specification in the class definition for all the relation definition (except for the pre-processor commands beginning by # whose are placed at the beginning of the line).

Relation equivalent to an attribute

In BOUML the generated code is obtained by the substitution of macros in a text, the macros known by the C++ code generator are :

Dependency

A dependency having the stereotype friend produce a C++ friend declaration of the pointed class.

With an other stereotype the dependency may produce an #include of the artifact associated to the target class, and you can choose to place this #include in the header or source file by editing the dependency usingn the tab C++.

Inheritance

The class inheritance are managed at the class level.

Extra member

The C++ definition of an extra member is set through the C++ tabs of the extra member dialog.

No macros.

Previous : profile

Next : C++ reverse