このページの翻訳は最新ではありません。ここをクリックして、英語の最新版を参照してください。
名前空間を使用すると、コードを論理パーツに整理して名前の競合を防ぐことができ、生成された C++ コードをより大きな C++ プロジェクトに簡単に統合できるようになります。また、名前空間を使用すると、セーフティ クリティカルなコードの MISRA C++ 規格への準拠性が高まります。このトピックでは、コード生成設定を使用して、生成された C++ コードの名前空間への整理をカスタマイズする方法について説明します。
生成コード名前空间作成を制御コード设定は次のとおりです。
コード構成パラメーター | 説明 | 指定方法 |
---|---|---|
コード构成の场合: MATLAB®Coder™アプリの場合:[コード外観]タブの[C++ 名前空間] |
生成された C++ コードを含む名前空間。 このパラメーターが空の場合、コード ジェネレーターはこのような名前空間を作成しません。 |
コード构成の场合: MATLAB Coderアプリの場合: テキスト フィールドで指定 |
コード构成の场合: MATLAB Coderアプリの場合:[コード外観]タブの[MathWorks コードの名前空間] |
すべての MathWorks®コードに対して生成されたコード (スパース データ型のコードなど) を含む名前空間。 このパラメーターが空の場合、コード ジェネレーターはこのような名前空間を作成しません。 |
コード构成の场合: MATLAB Coderアプリの場合: テキスト フィールドで指定 |
コード构成の场合: MATLAB Coderアプリの場合:[コード外観]タブの[MATLAB パッケージを C++ 名前空間に変換] |
MATLAB コード内のパッケージに対応する C++ 名前空間を生成するかどうか。 |
コード构成の场合: MATLAB Coderアプリの場合:[コード外観]タブで、[MATLAB パッケージを C++ 名前空間に変換]チェック ボックスをオンまたはオフにする |
名前空間の生成に関するその他のメモ:
CppNamespace
(またはアプリ対応)をを指定コードは,さされたすべての关数型型型型定义定义定义ををを名前名前空间にtmwtypes.h
に含まれる汎用的な型定義およびrtwtypes.h
にあるハードウェア固有の定義を除く)。この main ファイルの例と関数は、名前空間にパッケージ化されません。
MATLAB コードに入れ子にされたパッケージ (PKG2
内のPKG1
など) がある場合、生成された名前空間は同じ入れ子構造になります。
コード生成用の MATLAB コードのパッケージを作成する場合は、以下のガイドラインに従います。
“编码器”
という名前パッケージ作成しないで。。
cppnamespaceformathworkscode
プロパティ (またはアプリの同等のパラメーター) を既定以外の名前に設定する場合、その名前のパッケージは作成しないでください。
この例では、以下のコード生成設定を使用して名前空間を作成する方法を示します。
MATLAB® 関数の定義
2 つの MATLAB 関数foo
およびbar
を 2 つの個別のファイルfoo.m
およびbar.m
で定義します。ファイルbar.m
をパッケージmyPackage
に配置します。関数foo
は string 入力を受け入れ、関数bar
を呼び出します。
typefoo.m
function out = foo(str) temp = strlength(str); out = mypackage.bar(temp); end
type+mypackage/bar.m
function out = bar(in) coder.inline('never'); out = in + 1; end
コード构成オブジェクト定义
スタティックライブラリコード构成を作成しターゲット言语言语をををををににににします。。すべてののallcode
という名前指定ます。。。。コードコードコード名前ををnotmycode
という名前に指定します。
cfg = coder.config('lib'); cfg.TargetLang ='C++';cfg.CppNamespace ='allcode';cfg.cppnamespaceformathworkscode ='notmycode';
コードの生成
C++ スタティック ライブラリとコード生成レポートを生成します。入力型を、任意の長さにすることができる string スカラーに指定します。
s ="mystring";t = coder.typeof(s); t.Properties.Value = coder.typeof('a',[1 Inf]);代码根-configcfgfoo-args{t}-report
代码生成成功:要查看报告,打开('codegen/lib/foo/html/report.mldatx')。
生成されたコードの検証
コード生成レポートを開き、生成されたコードを検査します。
ファイルfoo.h
には、生成された関数foo
の宣言含まています。作成作成したたたたfoo
はパッケージ内にないため、生成された関数は、すべての生成コードを含む名前空間allcode
内でのみ宣言されています。
typecodegen/lib/foo/foo.h
// // File: foo.h // // MATLAB Coder version : 5.2 // C/C++ source code generated on : 04-Jun-2021 23:20:10 // #ifndef FOO_H #define FOO_H // Include Files #include "rtwtypes.h" #include "string1.h" #include#include // Function Declarations namespace allcode { extern double foo(const notmycode::rtString *str); } #endif // // File trailer for foo.h // // [EOF] //
ファイルbar.h
には、生成された関数bar
の宣言が含まれています。MATLAB 関数bar
をパッケージmypackage
内に作成したため、生成された関数は名前空間階層allcode: myPackage
内で宣言されています。
typeCodegen/lib/foo/bar.h
// // File: bar.h // // MATLAB Coder version : 5.2 // C/C++ source code generated on : 04-Jun-2021 23:20:10 // #ifndef BAR_H #define BAR_H // Include Files #include "rtwtypes.h" #include#include // Function Declarations namespace allcode { namespace mypackage { double bar(double in); } } // namespace allcode #endif // // File trailer for bar.h // // [EOF] //
ファイルstring1.h
Matlab字符串データデータデータをするされクラスクラスクラスrtString
の宣言れてます。。。。コードコード生成れたすべてのを名前名前空间notmycode
内に配置するようにコード ジェネレーターに指示したため、生成されたクラスrtString
は名前空間階層allcode::notmycode
内で宣言されています。
type代码根/lib/foo/string1.h
// // File: string1.h // // MATLAB Coder version : 5.2 // C/C++ source code generated on : 04-Jun-2021 23:20:10 // #ifndef STRING1_H #define STRING1_H // Include Files #include "rtwtypes.h" #include "coder_array.h" #include#include // Type Definitions namespace allcode { namespace notmycode { class rtString { public: void init(const ::coder::array &b_Value); rtString(); ~rtString(); ::coder::array Value; }; } // namespace notmycode } // namespace allcode #endif // // File trailer for string1.h // // [EOF] //
coder.CodeConfig
|coder.EmbeddedCodeConfig
|coder.mexcodeconfig