C++ コード生成
MATLAB® Coder™ によって C コードまたは C++ コードのいずれかを生成できます。既定ではコード ジェネレーターは C コードを作成します。生成された C++ コードでは、C++ コードをより読みやすく、使いやすくする、C 言語では使用できない機能を使用できます。
C++ コードの生成
C++ コードを生成するには、C コードを生成する際に使用するものと同じワークフロー手順全体に従います。例については、コマンド ラインでの C コードの生成を参照してください。コマンド ラインから、またはコード生成構成設定で、または MATLAB Coder アプリから、C++ 言語オプションを選択します。
ゼロ入力を受け入れる関数 foo
の C++ コードを生成するとします。
コマンド ラインで
-lang:c++
指定子を使用します。この指定子により、C++ コードをすばやく簡単に生成できます。たとえば、foo
の C++ スタティック ライブラリと C++ ソース コードを生成するには、次を入力します。codegen -config:lib -lang:c++ foo
構成オブジェクトで、
TargetLang
パラメーターを C++ に設定します。たとえば、C++ ダイナミック ライブラリを生成するには、次を入力します。cfg = coder.config('dll'); cfg.TargetLang = 'C++'; codegen -config cfg foo
アプリから、[コード生成] のステップで [C++] 言語ボタンを選択します。
生成されたコードでサポートされる C++ 言語機能
主な C++ 言語機能を利用するコード生成の詳細については、次のヘルプ トピックを参照してください。
目的 | 詳細 |
MATLAB コード内のクラスに対応する C++ クラスを生成する。 | |
エントリポイント関数を C++ クラスのメソッドとして生成する。 | |
MATLAB 名前空間に対応する C++ 名前空間の生成。指定した C++ 名前空間にすべての生成コードを配置する。 | |
動的に割り当てられた配列をカスタム C++ コードと生成コードの間で渡す。生成された C++ コードは、 |
以下の例は、これらの機能の使用方法を説明します。
生成される C コードと C++ コードの追加の差異
同じ MATLAB 関数について C コードと C++ コードを個別に生成し、生成されたソース コードを調べると、実装の差異があります。次のような明確な相違点があります。
生成された C++ コードには、同じ名前で複数のシグネチャをサポートするオーバーロードされた関数またはメソッドが含まれる。C 言語では、関数のオーバーロードはサポートされない。
生成された C++ コードは、異なる名前空間階層間で同じ識別子名を再利用する。たとえば、最上位の名前空間が
myNamespace_1
とmyNamespace_2
である 2 つの異なる名前空間階層で、同じ型名myType
が使用される場合がある。C 言語では、名前空間とこのような識別子名の再利用はサポートされない。生成された C コードでは、関数ヘッダーには、生成された C 関数の
extern "C"
識別子を指定する#ifdef __cplusplus
インクルード ガードが含まれる。コンパイラとリンカーは、C++ プロジェクトの一部として C コードをビルドする際にこれらの識別子を使用する。生成された C++ コードは、C++ ファイルには
.cpp
ファイル拡張子を使用し、ヘッダー ファイルには.h
拡張子を使用する。生成された C コードは.c
拡張子および.h
拡張子を使用する。生成された C++ コードは
static_cast
のような C++ キャストを使用する。これは、C のキャスト構文より明示的である。生成されたコードは、
Inf
およびNaN
について、C++ と C とでは異なるメカニズムに基づいて値を定義する。生成された C++ コードは生成コードの型への MATLAB 型のマッピングで説明されているカスタム データ型を使用する。
生成された C++ コードは、生成された C コードとは異なるライブラリを使用する。たとえば、C++ および C の既定の言語標準については、コード生成に使用する言語標準の変更で説明しています。