Вопрос про boost/math/quaternion.hpp и исключения
От: se_sss  
Дата: 10.08.11 20:55
Оценка:
Что-то не понимаю, о каких исключениях идёт речь в
boost/math/quaternion.hpp:

            quaternion<T> &        operator *= (T const & rhs)
            {
                T    at = a * rhs;    // exception guard
                T    bt = b * rhs;    // exception guard
                T    ct = c * rhs;    // exception guard
                T    dt = d * rhs;    // exception guard
                
                a = at;
                b = bt;
                c = ct;
                d = dt;
                
                return(*this);
            }

Чего они боятся?
Re: Вопрос про boost/math/quaternion.hpp и исключения
От: Vamp Россия  
Дата: 10.08.11 21:00
Оценка:
_>Что-то не понимаю, о каких исключениях идёт речь в
_> boost/math/quaternion.hpp:
_>Чего они боятся?
Так называемая exception safety. Если во время умножения выскочит исключение (так как тип T может быть любой, и его умножение может делать все что угодно) объект останется в предсказуемом состоянии (таким, каким оно было до начала операции, а не промежуточном).
Впрочем, непонятно, что они собираются делать если исключение бросит присваивание
Да здравствует мыло душистое и веревка пушистая.
Re[2]: Вопрос про boost/math/quaternion.hpp и исключения
От: se_sss  
Дата: 10.08.11 21:31
Оценка:
Вот оно в чём дело!!!
Спасибо.
Re[2]: Вопрос про boost/math/quaternion.hpp и исключения
От: Centaur Россия  
Дата: 11.08.11 05:30
Оценка: +1
Здравствуйте, Vamp, Вы писали:

V>Впрочем, непонятно, что они собираются делать если исключение бросит присваивание


Поэтому вместо присваиваний там должен быть swap.
Re[3]: Вопрос про boost/math/quaternion.hpp и исключения
От: Vamp Россия  
Дата: 11.08.11 12:12
Оценка: -1
C>Поэтому вместо присваиваний там должен быть swap.
Если просто заменить присваивания свапом это не поможет — свап вполне может просить исключение, и объект останется полу-сконструированным. Надо весь код переписывать — создавать временный объект квартерион и свопить его с текущим.
Да здравствует мыло душистое и веревка пушистая.
Re[4]: Вопрос про boost/math/quaternion.hpp и исключения
От: _nn_ www.nemerleweb.com
Дата: 11.08.11 12:25
Оценка: -1
Здравствуйте, Vamp, Вы писали:

C>>Поэтому вместо присваиваний там должен быть swap.

V>Если просто заменить присваивания свапом это не поможет — свап вполне может просить исключение, и объект останется полу-сконструированным. Надо весь код переписывать — создавать временный объект квартерион и свопить его с текущим.

Обычно swap реализуется небросаяющим исключения.
http://rsdn.nemerleweb.com
http://nemerleweb.com
Re[5]: Вопрос про boost/math/quaternion.hpp и исключения
От: Vamp Россия  
Дата: 11.08.11 12:30
Оценка:
__>Обычно swap реализуется небросаяющим исключения.
Это не всегда возможно.
Да здравствует мыло душистое и веревка пушистая.
Re[6]: Вопрос про boost/math/quaternion.hpp и исключения
От: Centaur Россия  
Дата: 11.08.11 12:47
Оценка:
Здравствуйте, Vamp, Вы писали:

__>>Обычно swap реализуется небросаяющим исключения.

V>Это не всегда возможно.

Если для деталек нельзя реализовать небросающий swap, то и для агрегата нельзя реализовать небросающий swap. Разве что только запихать детальки под [хитрож#пый] указатель. Но, товарищи, вам не кажется, что хранить четыре коэффициента кватерниона под указателем — это немножечко бред и не соответствует принципу You Don’t Pay for What You Don’t Need?

Более логично сказать, что хэй, ребята, тип коэффициентов кватерниона должен быть DefaultConstructible, CopyConstructible, CopyAssignable, NofailSwappable, RealNumber, и не волнует. У кого swap не nofail, пусть сам обернётся в простыню хитрож#пый указатель.
Re[7]: Вопрос про boost/math/quaternion.hpp и исключения
От: Vamp Россия  
Дата: 11.08.11 12:53
Оценка:
C>Если для деталек нельзя реализовать небросающий swap, то и для агрегата нельзя реализовать небросающий swap. Разве что только запихать детальки под [хитрож#пый] указатель. Но, товарищи, вам не кажется, что хранить четыре коэффициента кватерниона под указателем — это немножечко бред и не соответствует принципу You Don’t Pay for What You Don’t Need?
Да я квартерионом вообще не пользуюсь, мне все равно Просто отметил, что существующая реализация бессмысленна.
Да здравствует мыло душистое и веревка пушистая.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.