Указатель аргумент для повышения Python - PullRequest
5 голосов
/ 05 марта 2010

Какой лучший способ заставить функцию с указателем в качестве аргумента работать с boost 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*)
>>>                        

1 Ответ

4 голосов
/ 28 марта 2010

Насколько я могу судить, после небольшого поиска в теме вы не можете.Python по умолчанию не поддерживает типы аргументов указателя.Если бы вы захотели, вы, вероятно, могли бы отредактировать интерпретатор python вручную, но мне кажется, что это какой-то производственный код, так что это, вероятно, не вариант.: Вы можете добавить функцию-обёртку следующим образом:

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

Затем вызовите свой код с помощью:

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

...