問題タブ [boost-python]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
1 に答える
1126 参照

python - PyQT と Boost.Python の間でウィジェットを共有する

PyQt と Boost.Python の間でウィジェットを共有できるかどうか疑問に思っていました。

Qt を使用するアプリケーションに Python インタープリターを組み込みます。私のアプリケーションのユーザーが、C++ でプログラムされ、Boost.Python を介して公開された UI ウィジェットに独自の UI ウィジェットを埋め込めるようにしたいと考えています。

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

0 投票する
2 に答える
10246 参照

python - 動的にロードされたライブラリのCMake出力名?

Linuxでboost.pythonを使用して、Python用の動的にロードされるライブラリを構築するためのcmakeルールを作成しようとしています。Pythonモジュール名に「foo」を使用したいと思います。そのため、ライブラリを呼び出す必要がありますfoo.so。ただし、デフォルトでは、cmake はライブラリの命名に標準の規則を使用するため、

出力に乗りlibfoo.soます。でもset_target_properties(foo PROPERTIES OUTPUT_NAME "foobar") 作成しますlibfoobar.so

この動作を変更するにはどうすればよいですか?

0 投票する
4 に答える
14608 参照

python - Boost.Python-参照で戻る方法は?

Boost.Pythonを使用してC++クラスからPythonモジュールを作成しています。そして、私は参照に関する問題に遭遇しました。

値または参照のいずれかで返すことができるオーバーロードされたgetメソッドを持つクラスFooがある次のケースを考えてみてください。

署名をtypedefすると、値による戻り値を使用するように指定するのは簡単でした。ただし、を使用して参照を返すことも可能であると思います return_value_policy。ただし、適切と思われるものを使用する(doc); return_value_policy<reference_existing_object>うまくいかなかったようです。

私はそれが何をするのか誤解しましたか?

注:生涯管理せずに既存のオブジェクトを参照することは危険である可能性があることを私は知っています。

更新:
オブジェクトでは機能するように見えますが、基本的なデータ型では機能しません。
この改訂された例を見てください:

テストで期待される結果が得られたのはどれですか?

0 投票する
2 に答える
936 参照

c++ - 弱いPtrでBoostPythonを使用していますか?

親子関係を使用してC++で依存関係を設定しようとしています。親には子が含まれ、子には親への弱いポインタがあります。

また、Pythonで親から派生できるようにしたいと思います。ただし、これを行うと、この親子関係を接続する弱いポインタエラーが発生します。

C ++コード:

Pythonバインディング:

Pythonコード:

エラー:

抽出された親へのポインターをshared_ptrに変換しようとすると、Pythonでfree()の無効なポインターエラーが発生します。

この問題を回避する方法はありますか、それともBoost Pythonで弱いポインターの使用をあきらめる必要がありますか?

0 投票する
1 に答える
1031 参照

c++ - swig (または Boost::Python) のメンバーへのポインター

Python 用の C++ アプリからいくつかのバインディングを作成しました。

問題は、メンバーへのポインターを使用することです (最短パスを計算し、パラメーターとして最小化するプロパティを与えるためです)。

これは C++ の署名です。

これは私がやったことです(私がドキュメントで理解したことから):

これは、Python から関数を呼び出す方法です。

そして、これは私が得るエラーです:

デフォルトの 4 番目のパラメーターを使用するオーバーロードされたメソッドがあり、完全に機能します。

swigでメンバーへのポインタを使用することは可能ですか? はいの場合、トリックは何ですか?いいえの場合、最もエレガントな方法は何ですか?

ご協力ありがとうございました!

更新: Boost::python が確実にそれを行うかどうかを誰かが知っていれば、それに切り替えます。

0 投票する
1 に答える
523 参照

python - opensolaris に Shoutpy + Boost.python をインストールする際の問題

私はopensolaris 2009.6にshoutpyをインストールしようとしています。これは、boost.python に依存しています。boost_develblastwave からライブラリをインストールし、にリンク/opt/csw/include/boostしました/usr/include/boost。しかし、私がしようとするeasy_install shoutpyと、次の出力が得られます

これは、python2.6、opensolaris 2009.06、boost 1.35 を使用しています。

どんな助けでも素晴らしいでしょう!

乾杯

マーク

編集 - これは、問題のドメインがどこにあるかを分類するのが少し難しいため、serverfault に相互投稿されています。https://serverfault.com/questions/88724/problem-with-opensolaris-boost-python-and-shoutpy

0 投票する
1 に答える
1654 参照

python - Boost.Python:__init__はNone引数を受け入れます

NULL値の概念を持つBoost.PythonでラップされたC++値型があります。ラッパーコードの関連部分は次のように表示されます。

None現在、メソッドに渡してPythonでNULLインスタンスを作成しようとすると__init__()、const文字列参照を受け入れるC++ctorが無効な参照で呼び出されます。(&arg == NULL

コンストラクターに渡されているケースをトラップしNoneて適切に処理することはできますか、または少なくともプログラムがクラッシュする前に意味のある例外をスローすることはできますか?

Boost1.36とPython2.6.2を使用します。

0 投票する
2 に答える
3016 参照

constructor - Boost.Python: クラス外でコンストラクターを定義する

与えられたクラス:

Boost.Python でラップ:

Python でコンストラクタとして表示されるファクトリ メソッドを作成することは可能ですか。

そのようなpythonで:

0 投票する
3 に答える
2279 参照

c++ - Boost::Python の Operator=

次のクラスのようなものがあれば

boost::python を使用してその機能を python にエクスポートする簡単な方法はありますか? ドキュメントはリストされておらず、素晴らしく簡単です

私はPythonの専門家ではないので、正直に言うとこれが必要かどうかさえわかりません。しかし、Pythonスクリプトでこの機能が必要なので、確認のために質問を投稿しています。

編集:

.def( self = self ) を実行したときのコンパイラ エラーは次のとおりです。

0 投票する
3 に答える
4988 参照

c++ - Python、スレッド、GIL、およびC ++

boost :: pythonがpythonとのすべての相互作用のためにPythonGILを制御するようにする方法はありますか?

私はboost::pythonでプロジェクトを書いています。外部ライブラリのC++ラッパーを作成し、PythonスクリプトでC++ライブラリを制御しようとしています。外部ライブラリを変更できません。ラッパープログラムのみを変更できます。(私は上記の外部ライブラリの機能テストアプリケーションを書いています)

外部ライブラリはCで記述されており、関数ポインタとコールバックを使用して多くの手間のかかる作業を行います。そのメッセージングシステムであるため、メッセージが着信すると、たとえばコールバック関数が呼び出されます。

複数のオブジェクトが1つのコールバックをリッスンできるように、ライブラリにオブザーバーパターンを実装しました。私はすべての主要なプレーヤーを適切にエクスポートしており、特定の時点まで非常にうまく制御できます。

外部ライブラリは、メッセージの処理、メッセージの送信、処理などを行うスレッドを作成します。これらのコールバックの一部は異なるプロセスから呼び出される可能性があり、最近、Pythonはスレッドセーフではないことがわかりました。

これらのオブザーバーはPythonで定義できるため、Pythonを呼び出すことができる必要があり、Pythonはいつでもプログラムを呼び出す必要があります。

オブジェクトとオブザーバーをそのように設定します

次に、接続に送信するソースを作成し、receivedMsg関数を呼び出します。

したがって、通常のsource.send('msg')はC ++アプリに移動し、Cライブラリに移動してメッセージを送信します。接続はメッセージを取得し、コールバックを呼び出します。コールバックはC++ライブラリに戻ります。 connectionは、すべてのオブザーバーに通知しようとします。この時点では、ここではpythonクラスであるため、そのメソッドを呼び出します。

そしてもちろん、コールバックはメインのアプリケーションスレッドではなく、接続スレッドから呼び出されます。

昨日はすべてがクラッシュしていて、1つのメッセージを送信できませんでした。次に、Cplusplus-sigアーカイブを調べた後、GILと、物事をロックするためのいくつかの気の利いた機能について学びました。

したがって、オブザーバークラスのC++pythonラッパーは次のようになります

そして、それはうまくいきます、しかし、私がそのように250以上のメッセージを送ろうとすると

再びクラッシュします。以前と同じメッセージと症状で、

そのため、今回はPythonを呼び出すのではなく、C++アプリを呼び出すときに問題が発生すると考えています。

私の質問は、boost :: pythonがpythonとのすべての相互作用のためにGIL自体を処理するようにする方法はありますか?コード内に何も見つかりません。source.send呼び出しがboost_pythonに入る場所を見つけるのは非常に困難です:(