最新のリリースでは、このページがまだ翻訳されていません。 このページの最新版は英語でご覧になれます。

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++ 言語機能の制限されたサブセットを使用する C++ コードを生成できます。

名前空間

名前空間を使用してコードを生成することで、コードを、同じ関数やデータ型名をもつ可能性のある他のソース コードとより簡単に統合できます。名前空間を使用すると、コード ジェネレーターは、生成されたすべての関数と型定義をその名前空間にパッケージ化します (tmwtypes.h に含まれる汎用的な型定義および rtwtypes.h にあるハードウェア固有の定義を除く)。この main ファイルの例と関数は、名前空間にパッケージ化されません。

CppNamespace 構成オブジェクト オプションを使用して名前空間を指定します。たとえば generated という名前空間に C++ コードを生成するには、次を入力します。

cfg = coder.config('dll');
cfg.TargetLang = 'C++';
cfg.CppNamespace = 'generated'; 
codegen -config cfg foo 

アプリから名前空間を指定するには、[コード生成] のステップで [詳細設定]、[すべての設定] を選択し、[C++ 名前空間] フィールドを変更します。名前空間を使用する例の詳細については生成された複数の C++ コード プロジェクトの統合を参照してください。

クラス インターフェイス

よりオブジェクト指向のコードを得られるよう、クラス インターフェイスをもつ C++ コードを生成できます。エントリポイント関数または関数は C++ クラスでメソッドとして作成されます。CppInterfaceStyle プロパティを使用してクラス インターフェイスを指定します。生成されるクラスの名前を CppInterfaceClassName で指定します。以下に例を示します。

cfg = coder.config('lib');
cfg.GenCodeOnly = true;
cfg.TargetLang = 'C++';
cfg.CppInterfaceStyle = 'Methods';
cfg.CppInterfaceClassName = 'myClass';
codegen foog -config cfg -report -d withClass

詳細については、クラス インターフェイスをもつ C++ コードの生成を参照してください。

コード ジェネレーターは、MATLAB クラスからの直接の C++ クラスの生成をサポートしていません。

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

同じ MATLAB 関数について C コードと 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 の既定の標準の数学ライブラリについては、標準の数学ライブラリの変更で説明しています。

参考

関連するトピック