1

私は JUCE を使用して音楽トレーニング ゲームを設計しています。JUCE はマルチプラットフォームの C++ フレームワークであり、オーディオ/ビジュアルをワイヤーの近くでコーディングできます。

しかし、私は自分のゲームプレイ (制御フロー/データ処理) を Python でコーディングしました。これは複雑であり、さまざまなゲームプレイを試すことができるように変更し続けたいと考えています。Python は、この種のラピッド プロトタイピング作業に最適です。

したがって、(プラットフォームに依存しないため、Win/OSX/Lin/iOS/And) C++ で Python ランタイムを起動し、.py ファイルをフィードして、その .py でさまざまな関数を呼び出します。また、.py から C++ コードにコールバックできるようにしたいと考えています。

関連する公式の Python ドキュメントは次のとおりです: https://docs.python.org/2/extending/extending.html

CodeProject の記事は次のとおりです: http://www.codeproject.com/Articles/11805/Embedding-Python-in-CC-Part-I

ただし、どちらもマルチプラットフォームの問題に対処していないようです.

ライブラリ libpython.a とリンクし、ランタイム環境の起動、スクリプトのロード、python-code の実行などのさまざまな機能を含む #include をリンクするのがテクニックのようです。

しかし、確かにこの libpython.a はプラットフォームごとに個別にコンパイルする必要がありますか? もしそうなら、これはあまりきれいな解決策ではないので、代わりに Python ソース コードをプロジェクトに追加して、.a をコンパイルすることができますか?

どうすればこれを行うことができますか?

編集: https://wiki.python.org/moin/boost.python/EmbeddingPython

EDIT2: ここで完全な CPython ソース コードを取り込もうとするのはやり過ぎだと確信しています。システム コール/マルチスレッド/ファンシーなものをサポートしない C/C++ で、必要最小限の Python 実装を誰かが作成したに違いありません。 - Python 構文を 1 行ずつ処理するだけです。https://wiki.python.org/moin/PythonImplementationsを調べてみましたが、明らかな候補が見つかりません。

EDIT3: https://github.com/micropython/micropythonを最後のページに追加する必要がありますが、それでも私が求めているものではないようです

4

3 に答える 3

0

私はSWIGを使用して、Python を C++ アプリケーションに組み込み、それを拡張しています。つまり、アプリケーション外の Python で C++ API にアクセスしています。SWIG と Python はマルチプラットフォームなので、実際には問題になりません。SWIG の主な利点の 1 つは、多くの言語のバインディングを生成できることです。また、boost.python や cython など、使用できる C++ コード ラッパーも多数あります。

SOでこれらのリンクを確認してください:

Python の拡張 - swig や Cython ではなく、swig に拡張する

C++ API を Python に公開する

または、苦労してプレーンな Python/C API を使用することもできます。

于 2014-09-10T20:06:59.407 に答える
0

私は最近、C++ と Python を組み合わせたプロジェクトを作成して、両方の長所を活かすことにしました。私の考えは、明白な理由から Python でクラスと関数のラピッド プロトタイピングを行うことでしたが、それでも Python 内で C++ コードを呼び出すことができました (同様の理由から)。したがって、Python を C++ フレームワークに埋め込むのではなく、反対のことをお勧めします。つまり、C++ フレームワークを Python プロジェクトに埋め込みます。そのためには、非常に単純なインターフェース ファイルを作成し、インターフェース部分をSwigに任せるだけです。

ゼロから始めたい場合は、プロジェクト テンプレートの生成に使用できるcookiecutterという便利なツールがあります。ここ で説明されているように、後者は前者よりも改善されています。興味深いことに、cookiecutter コードを使用して C++ プロジェクトの構造を生成することもできます。この空のプロジェクトは、プラットフォームに依存しない C++ コードを開発するのに最適なフレームワークであるCMakeビルド システムを使用します。次に、この混合プロジェクトのディレクトリ構造を決定する必要があったため、以前の投稿の 1 つで詳細に説明しています。幸運を!

于 2014-09-08T21:37:24.037 に答える