問題タブ [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.
c++ - Boost::Python を介して C++ 関数を呼び出した Python モジュールと行番号を取得するにはどうすればよいですか?
Boost::Python を介して多くの Python 関数から呼び出される C++ 関数があります。C++ 関数が不正な引数を検出した場合、ログ メッセージを書き込んで処理を続行したいと考えています。そのログ メッセージには、C++ を呼び出した Python モジュールと行番号が記載されています。これどうやってするの?
C++ から例外をスローすることはできます。これは、キャッチできる Python 例外に変換されますが、それによって C++ 関数が中止されます。
たとえば、factorial() が 1 未満の数値を受け取った場合に警告メッセージをログに記録したいとします。ケースを簡単に処理できる (実際に処理する) という事実は無視してください。いずれにせよ、私の上司は警告を求めています。;)
このコードは、Python から直接呼び出すことも、Python から呼び出される他の C++ 関数から呼び出すこともできるため、C++ スタック トレース自体はあまり役に立ちません。
Boost::Python ライブラリが C++ からこの機能を提供することを期待しています。
c++ - boost::python 文字列変換可能なプロパティ
次のメソッドを持つ C++ クラスがあります。
classFoo
は変換可能ですstd::string
(暗黙のコンストラクター fromstd::string
とstd::string
キャスト演算子があります)。
Boost.Python ラッパー クラスを定義します。これは、とりわけ、前の 2 つの関数に基づいてプロパティを定義します。
また、クラスを との間で変換可能としてマークしstd::string
ます。
しかし、実行時にこのプロパティにアクセスしようとすると、変換エラーが発生します。
ラッパー関数のボイラープレートが多すぎずに変換を達成するにはどうすればよいですか? (私はすでに class にすべての変換関数を持っているFoo
ので、重複は望ましくありません。
visual-c++ - Visual Studio 9でboost::pythonを使用したmake_tuple
次の簡単な例を構築しようとしています
ここで入手可能、Visual Studio 9でこのコンパイルエラーが発生します
これはboost::pythonのバグですか、それとも何か間違っていますか? 上記のプログラムをコンパイルするにはどうすればよいですか?
c++ - boost :: pythonのモジュールにプロパティを追加する方法は?
ゲッターとセッターを使用して、クラスにプロパティを追加できます(単純な場合)。
したがって、次のようにPythonから使用できます。
しかし、モジュール自体(クラスではない)にプロパティを追加するにはどうすればよいですか?
がある
と
上記の2つの方法を使用して、クラスのグローバル関数とオブジェクトを追加できますが、クラスの場合と同じ方法でプロパティを追加できないようです。
c++ - ダイヤモンドの継承を回避する Boost.Python ラッピング階層
厄介な継承の問題を回避しながら、一連のクラスを Boost.Python でラップする最善の方法を見つけるのに苦労しています。次の構造を持つクラス A、B、および C があるとします。
Python から拡張できるように、すべてのクラス A、B、および C をラップしたいと考えています。これを達成するための通常の方法は、次のようになります。
AI から拡張されたクラス B と C では、A のラッピング実装を継承して共有できるようにしたいと考えています。
ただし、ブースト ラッパー ベースの二重継承と、B_Wrapper および C_Wrapper オブジェクトでの A の二重継承により、あらゆる種類の厄介な問題が発生するようです。私が見逃しているこのインスタンスを解決する一般的な方法はありますか?
ありがとう。
python - Python で PyObjC を使用して CGImageRef を再解釈する
タイトルに要約するには少し複雑なことをしているので、ご容赦ください。
特殊な画像操作機能を提供する C++ ライブラリへのインターフェイスを提供する Python モジュールを作成しています。Python から CGImageRefs としてイメージ バッファにアクセスできると便利です。そのため、Quartz を使用して (PyObjC を使用するとうまく機能します)、さらに操作できます。
したがって、次のように、独自の画像バッファーから CGImageRef 表現を提供する C++ 関数があります。
CGImageRef CreateCGImageRefForImageBuffer(shared_ptr<ImageBuffer> buffer);
Boost::Python を使用して Python ブリッジを作成しています。Python から CGImageRef を使用できるように、この関数をエクスポートする最も簡単な方法は何ですか?
問題: CGImageRef 型は、未定義の構造体へのポインターであるため、直接エクスポートできません。したがって、それを PyCObject などでラップするラッパー関数を作成して、ポインターを Python に送信できるようにすることができます。しかし、このオブジェクトを Python から CGImageRef に「キャスト」するにはどうすればよいでしょうか。これについてもっと良い方法はありますか?
c++ - Python 拡張機能のマルチスレッドについて説明する
Python インタープリターにはグローバル インタープリター ロックがあり、拡張機能はマルチスレッド環境でグローバル インタープリター ロックを取得する必要があると理解しています。しかし、Boost.Python HOWTO ページには、拡張関数は GIL を解放し、終了時に再取得する必要があると書かれています。
ここで推測する誘惑に抵抗したいので、次のシナリオでGILロックパターンがどうあるべきかを知りたいです:
- 拡張機能は Python から呼び出されます (おそらく Python スレッドで実行されます)。
- そして、拡張機能のバックグラウンド スレッドが関数にコールバックし
Py_*
ます。
最後の質問は、なぜリンクされたドキュメントが GIL を解放して再取得する必要があると述べているのですか?
python - Boost Python C++ クラスに `__str__` メソッドを追加する際のビルドの問題
ブースト python を少しいじり始めたところ、問題が発生しました。C++ クラスを python に公開しようとしましたが、問題はありませんでした。__str__
しかし、理解できないビルドエラーが発生することなく、クラスの機能を実装することはできないようです。
私はboostproによるboost 1_42 prebuildを使用しています。cmake と vs2010 コンパイラを使用してライブラリをビルドします。
私は非常に簡単なセットアップをしています。ヘッダー ファイル (tutorial.h) は次のようになります。
対応する cpp ファイルは次のようになります。
CMakeLists.txt は次のようになります。
私が得るビルドエラーは次のとおりです。
何がうまくいかなかったのか誰にもわかりませんか?ラッパー コードから .def(str(self)) 部分を削除すると、すべてが正常にコンパイルされ、クラスは Python から使用できるようになります。お役に立てば幸いです。
ありがとう、リッカード
編集:constを忘れました
c++ - Ubuntu10.04でのBoost.Pythonチュートリアル
Boostの最新バージョンをダウンロードし、Ubuntu 10.04でBoost.pythonチュートリアルを起動して実行しようとしています:http ://www.boost.org/doc/libs/1_43_0/libs/python/doc/tutorial/ doc / html / python / hello.html
正しいディレクトリに移動し、「bjam」を実行すると、デフォルト設定を使用してコンパイルされました。私はまだbjam設定ファイルを作成していません。コンパイルは機能したように見えますが、Pythonスクリプトにファイルを含める方法がわかりません。python hello worldスクリプトを実行しようとすると、次のエラーが発生します。
誰が何が起こっているのか知っていますか?
c++ - 既存のブースト python モジュールにリンクする方法
私はこれについて何度も疑問に思っていましたが、明確な答えは得られませんでした。boost.python フレームワーク内で別の boost.python モジュールにリンクすることは可能ですか。
たとえば、boost_python_module(libA) 内でクラス A をエクスポートし、boost_python_module(libB) 内で関数 B(A a) をエクスポートしました。libAのAにリンクするようにlibBで指定することは可能ですか?
この問題を別の見方で見ると、現在、すべてのバインディングを 1 つのモジュール内で 1 回で生成する必要があるということです。複数のboost_python_moduleでバインディングを段階的に生成することは可能ですか?