Уведомления

Группа в Telegram: @pythonsu

#1 Авг. 18, 2011 23:05:57

doza_and
От:
Зарегистрирован: 2010-08-15
Сообщения: 4138
Репутация: +  252  -
Профиль   Отправить e-mail  

boost::python завернуть boost::array

:) не надо, а то любители clr начнут ехидно тыкать в нас пальцами.



Офлайн

#2 Авг. 18, 2011 23:37:14

Обедающий философ
От:
Зарегистрирован: 2011-05-06
Сообщения: 66
Репутация: +  0  -
Профиль   Отправить e-mail  

boost::python завернуть boost::array

Ну в самом деле, как это назвать - одна функция нормально значение возвращает, а другая почти такая же из того же буста - нет? С одной стороны, очень хочется назвать это глюком буста, с другой стороны - ну не может в популярном продукте быть такой чудовищный глюк, тем паче при столь скудных упоминаниях.



Офлайн

#3 Авг. 18, 2011 23:52:58

Обедающий философ
От:
Зарегистрирован: 2011-05-06
Сообщения: 66
Репутация: +  0  -
Профиль   Отправить e-mail  

boost::python завернуть boost::array

Даже всемогущий Roman Yakovenko не смог дать правильный ответ. http://mail.python.org/pipermail/cplusplus-sig/2008-July/013419.html Также в документации говорится об некоем параметре DerivedPolicies http://www.boost.org/doc/libs/1_47_0/libs/python/doc/v2/indexing.html#indexing_suite , но как его применять (и поможет ли он) - я так и не понял. Единственное, что я понял - return_value_policy<reference_existing_object>() на этом месте не прокатывает.



Офлайн

#4 Авг. 23, 2011 13:14:51

Обедающий философ
От:
Зарегистрирован: 2011-05-06
Сообщения: 66
Репутация: +  0  -
Профиль   Отправить e-mail  

boost::python завернуть boost::array

Послание к потомкам. Коли вы откопаете сию тему, скажем, через год или пять лет, и так окажется, что вы знаете правильный ответ на один или более поставленных вопросов - ради всего святого, приведите его здесь! Родина вас не забудет.



Офлайн

#5 Авг. 23, 2011 13:24:27

Андрей Светлов
От:
Зарегистрирован: 2007-05-15
Сообщения: 3137
Репутация: +  14  -
Профиль   Адрес электронной почты  

boost::python завернуть boost::array

Правильный ответ: если вам нужны указатели — используйте вместо них smart pointers. Это если коротко



Офлайн

#6 Авг. 23, 2011 15:38:56

Обедающий философ
От:
Зарегистрирован: 2011-05-06
Сообщения: 66
Репутация: +  0  -
Профиль   Отправить e-mail  

boost::python завернуть boost::array

А ежели чуть менее коротко?



Офлайн

#7 Авг. 24, 2011 00:00:13

Обедающий философ
От:
Зарегистрирован: 2011-05-06
Сообщения: 66
Репутация: +  0  -
Профиль   Отправить e-mail  

boost::python завернуть boost::array

На минуту забудем об указателях.

Есть у меня один класс. И на его обёртке буст с неизбежностью рисовал мне ошибку на добрых два экрана. Я долго думал, в чём может быть дело. А дело оказалась в, не побоюсь этого слова, членах оного класса, имеющих тип ofstream. Закомментировал их - стало компилиться (хотя, конечно, толку от такой компиляции чуть). Что характерно, ошибка рисуется прямо на самом определении class_ (точнее, в конце его), даже ежели все питоновские определения членов закомментировать. Заменил офстрим на указатель (глупый) - всё стало хорошо.



Офлайн

#8 Авг. 24, 2011 09:42:02

doza_and
От:
Зарегистрирован: 2010-08-15
Сообщения: 4138
Репутация: +  252  -
Профиль   Отправить e-mail  

boost::python завернуть boost::array

Так чего вы хотите - стримы содержат защищенный оператор присваивания, они очень специфичные поэтому и получаете кучу ошибок.



Офлайн

#9 Авг. 27, 2011 18:49:56

Обедающий философ
От:
Зарегистрирован: 2011-05-06
Сообщения: 66
Репутация: +  0  -
Профиль   Отправить e-mail  

boost::python завернуть boost::array

Обнаружил совершенно чудовищную вещь. Когда я запускаю второй экземпляр моей программы, то первый экземпляр падает! Никаких грязных хаков не использовал, мамой клянусь. Сначала грешил на pyqt, но попробовал без такового - тот же эффект. Пишет “ошибка сегментирования” или “ошибка шины” в зависимости от воли случая.

Кто виноват и что делать?



Отредактировано (Авг. 27, 2011 18:51:12)

Офлайн

#10 Авг. 27, 2011 19:10:01

doza_and
От:
Зарегистрирован: 2010-08-15
Сообщения: 4138
Репутация: +  252  -
Профиль   Отправить e-mail  

boost::python завернуть boost::array

1 Если грязных хаков нет, то я бы в первую очередь проверил использование файлов портов и т.п. Те тех мест в которых процессы могут взаимодействовать.
2 Если ждете помощи - покажите простенький пример того, что у вас падает.
3 Насколько я понял, вы много используете указатели, это нормально, но стоит всетаки ппопробовать использовать boost::shared_ptr и прочие указатели из boost как посоветовал Андрей. На производительности вы почти не потеряете, а надежность возрастет значительно. Их полезно использовать потому, что при переписывании надо выбрать какой тип умных указателей использовать, поэтому начинаешь себе отдавать отчет в каком режиме используется указатель.
4 Если эффект не стабилен (те не всегда происходит падение) то скорее всего используется неинициализированная переменная для индексации или что-то подобное - обычные С приключения - сделайте максимальные warnings натравите внешний инструментарий для проверки кода на глупости, добейтесь чтобы не было предупреждений.



Отредактировано (Авг. 27, 2011 19:20:52)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version