Сообщение Re[2]: А идет ли развитие в области альтернатив исключениям? от 27.03.2016 5:01
Изменено 27.03.2016 5:03 uncommon
Здравствуйте, Evgeny.Panasyuk, Вы писали:
EP>Есть некий симбиоз возвращаемых значений и исключений — expected<T>
Товарищ Александреску опять по своему обыкновению придумал фигню, которую никто никогда не будет использовать. Даже он сам. Expected<T> завязан на make_exception_ptr:
А make_exception_ptr как реализован?
То бишь, проще и более эффективно, просто сразу выбросить исключение и не заморачиваться с Expected<T>, который внутри себя бросает, а потом ловит исключение, с одной единственной целью, как он сам говорит: избежать выброса исключения, потому что это очень дорогая операция.
EP>Есть некий симбиоз возвращаемых значений и исключений — expected<T>
Товарищ Александреску опять по своему обыкновению придумал фигню, которую никто никогда не будет использовать. Даже он сам. Expected<T> завязан на make_exception_ptr:
// Building from exception
// © 2012- Andrei Alexandrescu. Do not redistribute. 23 / 54
template
<class E>
static Expected<T> fromException(const E& exception) {
if (typeid(exception) != typeid(E)) {
throw std::invalid_argument( "slicing detected");
}
return fromException(std::make_exception_ptr(exception));
}
А make_exception_ptr как реализован?
166│ /// Obtain an exception_ptr pointing to a copy of the supplied object.
167│ template<typename _Ex>
168│ exception_ptr
169│ make_exception_ptr(_Ex __ex) _GLIBCXX_USE_NOEXCEPT
170│ {
171│ #if __cpp_exceptions
172│ try
173│ {
174├> throw __ex;
175│ }
176│ catch(...)
177│ {
178│ return current_exception();
179│ }
180│ #else
181│ return exception_ptr();
182│ #endif
183│ }
То бишь, проще и более эффективно, просто сразу выбросить исключение и не заморачиваться с Expected<T>, который внутри себя бросает, а потом ловит исключение, с одной единственной целью, как он сам говорит: избежать выброса исключения, потому что это очень дорогая операция.
Re[2]: А идет ли развитие в области альтернатив исключениям?
Здравствуйте, Evgeny.Panasyuk, Вы писали:
EP>Есть некий симбиоз возвращаемых значений и исключений — expected<T>
Товарищ Александреску опять по своему обыкновению придумал фигню, которую никто никогда не будет использовать. Даже он сам. Expected<T> завязан на make_exception_ptr:
А make_exception_ptr как реализован?
То бишь, проще и более эффективно просто сразу выбросить исключение и не заморачиваться с Expected<T>, который внутри себя бросает, а потом ловит исключение, с одной единственной целью, как он сам говорит: избежать выброса исключения, потому что это очень дорогая операция.
EP>Есть некий симбиоз возвращаемых значений и исключений — expected<T>
Товарищ Александреску опять по своему обыкновению придумал фигню, которую никто никогда не будет использовать. Даже он сам. Expected<T> завязан на make_exception_ptr:
// Building from exception
// © 2012- Andrei Alexandrescu. Do not redistribute. 23 / 54
template
<class E>
static Expected<T> fromException(const E& exception) {
if (typeid(exception) != typeid(E)) {
throw std::invalid_argument( "slicing detected");
}
return fromException(std::make_exception_ptr(exception));
}
А make_exception_ptr как реализован?
166│ /// Obtain an exception_ptr pointing to a copy of the supplied object.
167│ template<typename _Ex>
168│ exception_ptr
169│ make_exception_ptr(_Ex __ex) _GLIBCXX_USE_NOEXCEPT
170│ {
171│ #if __cpp_exceptions
172│ try
173│ {
174├> throw __ex;
175│ }
176│ catch(...)
177│ {
178│ return current_exception();
179│ }
180│ #else
181│ return exception_ptr();
182│ #endif
183│ }
То бишь, проще и более эффективно просто сразу выбросить исключение и не заморачиваться с Expected<T>, который внутри себя бросает, а потом ловит исключение, с одной единственной целью, как он сам говорит: избежать выброса исключения, потому что это очень дорогая операция.