Форум сайта python.su
Вопщем стал искать минимальный пример, дабы привести. В итоге таки обнаружил корень зла. Дабы лишний раз не вбивать лишние команды, я сделал компиляцию из питона:
os.system("bjam && cp bin/gcc-4.5.2/debug/model.so .")
Офлайн
Чтобы все было на нужном месте делается в скрипте для jam делается install
Офлайн
Нашёл решение. http://stackoverflow.com/questions/279237/python-import-a-module-from-a-folder/6098238#6098238 Тепереча, как говорится, и овцы сыты, и кошки серы. То бишь ежели перекомпиляция не требуется, то и файл не перезаписывается, стало быть, ничего не падает.
Офлайн
Всетаки пришлось и обычные массивы цеплять.
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)
;
}
Отредактировано (Окт. 7, 2011 14:46:10)
Офлайн
Добрый вечер ещё раз!
Спешу вам сообщить, что я открыл для себя SWIG. По первым впечатлениям - небо и земля по сравнению с бустом. Вся информация, которая нужна (почти) - содержится на одной странице. http://www.swig.org/Doc1.3/Python.html . Заводится с полоборота (по крайней мере по сравнению с бустом), массивы и всё остальное обёртывает на раз. Правда, STL-ные вектора и пр. ещё не пробовал заворачивать, но в туториале вроде пишут, что и это не проблема. Ежели встречу какие-либо подводные камни - то напишу. Также интересно было бы узнать, по каким параметрам буст питон лучше свига.
Офлайн
Обедающий философсм. http://www.boostpro.com/writing/bpl.html
по каким параметрам буст питон лучше свига
Офлайн
doza_andВот это не пробовал.
Преимущество boost::python - более прозрачное создание и управление питоновскими объектами из c++.
doza_andМожно пример?
В сложных случаях очень трудно научить swig делать то что надо (это требует очень глубокого его изучения).
doza_andНу так у вас же это тоже вызвало проблему. И вы тоже кучу времени положили на её решение (хотя и успешно, в отличие от). А в свиге это в одно действие делается.
Проблема с векторами в boost::python вызывает у меня удивление
Офлайн