2009-03-02 11 views
30

私はC++でクラスを実装しました。私はPythonでそれを使いたい。 ステップバイステップ法を提案し、各ステップを詳しく説明してください。 PythonのPythonでC++クラスを使用するにはどうすればよいですか?

>>> T1 = Test(12) 
>>> T1.getInt() 
12 
>>> T1.setInt(32) 
>>> T1.getInt() 
32 

でこのよう 気にいらない...今

class Test{ 
    private: 
     int n; 
    public: 
     Test(int k){ 
      n=k; 
     } 
     void setInt(int k){ 
      n = k; 
     } 
     int getInt(){ 
      return n; 
     } 
}; 

、してくださいsuggest.How私はこれを行うことができますか? 注:私はそれを手動で行う方法を知りたいと思います。私は第三者図書館への依存を望んでいません。

+1

奇妙なことに、なぜ第三者を避けたいのですか? –

答えて

23

Boost.Pythonを参照してください。これは、C + +でPythonモジュールを書くためのライブラリです。

SWIGもご覧ください。他のスクリプト言語のモジュールも処理できます。私はこれまで、クラスのモジュールを作成してPython内で使用するためにこれを使用しました。よく働く。

Python/C APIを使用して手動でインターフェイスを作成することができます。かなり低レベルですが、あなたはPythonがどのようにシーンの背後で働いているかについて多くの知識を得るでしょう(とにかくSWIGを使うときに必要になります)。

+12

「サードパーティのライブラリ依存関係は必要ありません」という要件を満たしていません。 – Constantin

+2

とにかくPythonライブラリが必要です。もちろんpython/c apiも含まれています。 –

9

ctypesが良好です。これは本当に使いやすく、Pythonに標準で付属しています。残念ながら、C言語のインタフェースを持つ共有ライブラリ(Unix)やDLL(Windows)としか話せません。つまり、C++オブジェクトに直接インタフェースできません。しかしハンドルが特定のオブジェクトを参照するハンドルシステムを使用することができます。

>>> getInt(h) 
12 

私はそれが簡単で分かりやすく、余分なライブラリを必要としないと思います。

+1

あなたは、「共有ライブラリやDLLと話すことができない、つまり、C++オブジェクトに直接インタフェースできない」ということを詳しく教えてもらえますか? PythonでC++オブジェクトを使用すると、何が変化するでしょうか?それは顕著な影響を与えるか?私は最終的にPythonで私のC++ APIへのバインディングを書く必要があります。 –

+3

@ 2g7hgfdr8324、あなたは私を間違って引用しました。私は "共有ライブラリやDLLとは話せない"とは言いませんでした。私は反対に言った。はい、C++ APIをDLLとして公開することができれば、ctypes経由でPythonから呼び出すことができます。あなたのインターフェースは、C++ではなくCでなければなりません。 –

関連する問題