2012-03-14 64 views
4

私はバックエンドとしてC++を使ってctypesを扱っています。今、このような機能は、C++にあります:ctypes python std :: string

void HandleString(std::string something){ 

    ... 
} 

私のpythonからこの関数を呼び出す方法を疑問に思って - 何のctypeがない(明らかに文句を言わない仕事をc_char_p)この関数に文字列パラメータを送信するために...

どのように私はこの問題を解決し、CからPython文字列を渡し++(と*何かがないと選択肢であるcharにパラメータの変更)

PS私はこのような回避策を作成することができますすることができますか?

  1. はCにc_char_pとしてcharははstd ::文字列するに
  2. リターン文字列またはそのポインタを何とか*変換++機能を??? Pythonの文字列を送信します!最も簡単な方法は、薄いを書くことであるよう
+1

回避策を講じる場合は、c_char_pを 'std :: string'に変換してすぐに' HandleString'を呼び出すC++関数に送信する方が理にかなっていますか?実際には、 'const char *'から 'std :: string'への暗黙的な変換があります。回避策関数は単に' HandleString'の引数式としてポインタを使うことができます。 'std :: string'をPythonに引き渡そうとしないでください。 –

答えて

3

が鳴る(どうやって?)HandleString機能へのpythonからそれを送る(しかし、再び、私はここに*文字列にパラメータを変更する必要がありますように私は感じる)

  • をPythonではPythonからより複雑なC++クラスにパラメータを再ネゴシエートする唯一の目的のために、ライブラリの周りのC++ラッパー。

    このようなアプローチは、PythonコードまたはC++コードのいずれにも実際の複雑さを追加することなく、同じ種類の将来の問題を解決するのに役立ちます。

  • 3

    ザPythonのC APIはchar*にパイソンstrオブジェクトを変換し、 はchar*(実際char const*) からstd::stringにC++での暗黙の変換があります。 Pythonの文字列はヌル文字を含めることができる場合

    、あなたは変換すること PyString_AsStringAndSizeを使用する必要があり、2つの値 (char*Py_ssize_t)の周囲を通過ます。 の明示的な変換がstd::stringにもあります:std::string(pointer, length)

    関連する問題