C/C++ は python API を使用して py をロードできます。
ただし、単純なタイプのみがサポートされています。
APIを使用してマップをpyに渡すにはどうすればよいですか?
または、どの方法が優れていますか?
さまざまな STL タイプ用の既製のテンプレートがいくつかあるSWIGを使用します。たとえば、これを参照してください。
extern C
Python C API は C レベルの機能 (C++ レベル 1 ではない) をサポートします -- 基本的に、ブロック (&c は含まれません)に入れることができるものを Python に簡単に公開できますstd::map
-- 他のものについては、少し必要ですより多くの仕事。その作業の性質は、Python で使用するために C++ コードをラップするために何を使用しているかによって異なります。ベア C API、SWIG、SIP、Boost Python、Cython など、多くのオプションがあります。
裸のC API(あなたの質問とタグから判断して、あなたが使用しているものだと思います)では、カスタムオブジェクトタイプを作成することをお勧めします-おそらく、最近では、collections.Mappingをサブクラス化する1つ(MutableMapping
もちろん、変更可能な場合) )、Python でマッピングを実装する場合と同様に、マッピング オブジェクト構造に加えて、スロットなどの一般的な型構造の必要なビットを実装します。tp_iter
tp_iternext
もちろん、重要なアイデアは、選択したものに委譲しstd::map
、必要な型変換と低レベルの操作 (オブジェクトの割り当て、参照カウント) を実行するだけで、アイテムの設定と取得、および反復を実装することです。は、Python を拡張するための高レベルのフレームワークによって、本質的にその必要がなくなる部分ですが、「ラップ アンド デリゲート」の基礎となるアーキテクチャはあまり変わりません。