Main Content

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++ クラスを生成する。

MATLAB クラスに対応する C++ クラスの生成

エントリポイント関数を C++ クラスのメソッドとして生成する。

クラス インターフェイスをもつ C++ コードの生成

MATLAB 名前空間に対応する C++ 名前空間の生成。指定した C++ 名前空間にすべての生成コードを配置する。

生成された C++ コードの名前空間への整理

動的に割り当てられた配列をカスタム C++ コードと生成コードの間で渡す。生成された C++ コードは、coder::array クラス テンプレートを使用してこのような配列を実装する。生成コードは、このテンプレートの操作に使用できる簡単な API を提供する。

生成された関数インターフェイスでの動的に割り当てられた C++ 配列の使用

以下の例は、これらの機能の使用方法を説明します。

生成される C コードと C++ コードの追加の差異

同じ MATLAB 関数について C コードと C++ コードを個別に生成し、生成されたソース コードを調べると、実装の差異があります。次のような明確な相違点があります。

  • 生成された C++ コードには、同じ名前で複数のシグネチャをサポートするオーバーロードされた関数またはメソッドが含まれる。C 言語では、関数のオーバーロードはサポートされない。

  • 生成された C++ コードは、異なる名前空間階層間で同じ識別子名を再利用する。たとえば、最上位の名前空間が myNamespace_1myNamespace_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 の既定の言語標準については、言語標準の変更で説明しています。

参考

関連するトピック