Найти - Пользователи
Полная версия: boost::python завернуть boost::array
Начало » Python для новичков » boost::python завернуть boost::array
1 2 3 4
Обедающий философ
Вопщем стал искать минимальный пример, дабы привести. В итоге таки обнаружил корень зла. Дабы лишний раз не вбивать лишние команды, я сделал компиляцию из питона:

os.system("bjam && cp bin/gcc-4.5.2/debug/model.so .")
Ну и, видимо, ей не нравится, когда файл на ходу подвергается переписыванию. Премного благодарен.

И коли уж речь об этом зашла - как сделать, чтобы бджем компилировал в ту же папку? Ну или как все реальные пацаны делают, чтобы всё было разложено по папкам и в то же время чтобы всё было в досягаемости? А то у меня как-то с папками никогда не складывались отношения.
doza_and
Чтобы все было на нужном месте делается в скрипте для jam делается install
Обедающий философ
Нашёл решение. http://stackoverflow.com/questions/279237/python-import-a-module-from-a-folder/6098238#6098238 Тепереча, как говорится, и овцы сыты, и кошки серы. То бишь ежели перекомпиляция не требуется, то и файл не перезаписывается, стало быть, ничего не падает.
doza_and
Всетаки пришлось и обычные массивы цеплять.
class Ta
{
public:
float x[5];
};
template <class T,class TR,TR T::*PTR>
boost::python::list VectorGetter(T& self)
{
// return sizeof(TR);
boost::python::list t;
const int ITEMSIZE=sizeof((self.*PTR)[0]);
const int N=sizeof(TR)/ITEMSIZE;
for(int i=0;i<N;++i) t.append((self.*PTR)[i]);
return t;
}
template <class T,class Tr,class TR,TR T::*PTR>
void VectorSetter(T& self,boost::python::object& v)
{
const int ITEMSIZE=sizeof(Tr);
const int N=sizeof(TR)/ITEMSIZE;
for(int i=0;i<N;++i)
(self.*PTR)[i]=extract<Tr>(v[i]);
// (self.*PTR)[i]=extract<float>(v[i]);
}
#define add_vectorf(T,arg) add_property(#arg, &VectorGetter<T,decltype(T().arg),&T::arg>,&VectorSetter<T,float,decltype(T().arg),&T::arg>)
#define add_vectori(T,arg) add_property(#arg, &VectorGetter<T,decltype(T().arg),&T::arg>,&VectorSetter<T,int,decltype(T().arg),&T::arg>)
BOOST_PYTHON_MODULE(cproto)
{
class_<Ta>("Ta")
.add_vectorf(Ta,kI)
;
}
Проблема: не очень понятно как сделать разадресацию типа - поэтому лезут лишние параметры.
extract<float>(v); - проходит
extract<decltype((self.*PTR))>(v); - не проходит
Обедающий философ
Добрый вечер ещё раз!

Спешу вам сообщить, что я открыл для себя SWIG. По первым впечатлениям - небо и земля по сравнению с бустом. Вся информация, которая нужна (почти) - содержится на одной странице. http://www.swig.org/Doc1.3/Python.html . Заводится с полоборота (по крайней мере по сравнению с бустом), массивы и всё остальное обёртывает на раз. Правда, STL-ные вектора и пр. ещё не пробовал заворачивать, но в туториале вроде пишут, что и это не проблема. Ежели встречу какие-либо подводные камни - то напишу. Также интересно было бы узнать, по каким параметрам буст питон лучше свига.
doza_and
Обедающий философ
по каким параметрам буст питон лучше свига
см. http://www.boostpro.com/writing/bpl.html
Преимущество boost::python - более прозрачное создание и управление питоновскими объектами из c++.
В сложных случаях очень трудно научить swig делать то что надо (это требует очень глубокого его изучения). Есть под visual studio проблемы c debug версией интерфейса (требует debug версии самого питона). Проблема с векторами в boost::python вызывает у меня удивление - можно было написать как это делать.
swig можно рекомендовать когда есть туча классов или функций с простенькими интерфейсами, Когда надо обеспечить интерфейс не только с python, но и с другими языками.
Обедающий философ
doza_and
Преимущество boost::python - более прозрачное создание и управление питоновскими объектами из c++.
Вот это не пробовал.

doza_and
В сложных случаях очень трудно научить swig делать то что надо (это требует очень глубокого его изучения).
Можно пример?

doza_and
Проблема с векторами в boost::python вызывает у меня удивление
Ну так у вас же это тоже вызвало проблему. И вы тоже кучу времени положили на её решение (хотя и успешно, в отличие от). А в свиге это в одно действие делается.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB