5

引数としてポインタを持つ関数をブーストPythonで機能させるための最良の方法は何ですか?ドキュメントには戻り値の可能性がたくさんあるようですが、引数を使ってそれを行う方法がわかりません。

void Tesuto::testp(std::string* s)
{
    if (!s)
        cout << " NULL s" << endl;
    else
        cout << s << endl;
}

>>> t.testp(None)
 NULL s
>>>       
>>> s='test'
>>> t.testp(s)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
Boost.Python.ArgumentError: Python argument types in
    Tesuto.testp(Tesuto, str)
did not match C++ signature:
    testp(Tesuto {lvalue}, std::string*)
>>>                        
4

1 に答える 1

4

私が知る限り、この件について少しグーグルした後は、できないということです。Pythonは、デフォルトでポインタ引数タイプをサポートしていません。必要に応じて、Pythonインタープリターを手動で編集することもできますが、これはある種の製品コードのように思われるため、おそらくオプションではありません。

編集:次のようなラッパー関数を追加できます:

 
std::string * pointer (std::string& p)
{
    return &p;
}

次に、次のコードを使用してコードを呼び出します。


>>> s = 'hello'
>>> t.testp (pointer (s))
hello
>>>

于 2010-03-27T23:43:25.250 に答える