@ProCxx

Страница 969 из 2477
Владислав
16.06.2017
14:25:50
scope exit у тебя выполнится перед выходом из скоупа в котором указан

Igor
16.06.2017
14:25:59
exit_code = [](){ if (path1) {return 1;} if (path2) {return 2;} }();

Constantine
16.06.2017
14:26:25
exit_code = [](){ if (path1) {return 1;} if (path2) {return 2;} }();
это чит с двумя функциями, я понимаю, что я могу сделать две функции

Arseny
16.06.2017
14:27:03
Почему нельзя сделать функцию, всегда возвращает int и использовать ее внутри исходной?

Google
Igor
16.06.2017
14:27:06
ну э, либо две функции, либо лямбда, либо много раз =; return

либо если совсем хочется наркомании и сломать мозги читателю, тернарный оператор и запятые

Arseny
16.06.2017
14:30:47
Две функции вроде логичный способ. Что в нем читерского?

Igor
16.06.2017
14:31:53
нежелание засорять неймспейс одноразовыми функциями, я так понимаю

Владислав
16.06.2017
14:32:28
мб добавить статический флаг и от него плясать?

Pepe
16.06.2017
14:33:32
можешь сам написать и бенчмаркать
Начиная примерно с 2^2^17 быстрее вроде согласно Вики). То есть почти для всего другие методы будут применяться

Только для очень больших чисел применяется. И я хочу для гпу написать но пока не понял как gmp увязать с этим

Владислав
16.06.2017
14:35:29
ну по сути то же самое

только определено будет в другом месте

Anatoly
16.06.2017
14:36:31
если речь о том, чтобы обязать выполнять нечно перед return, то почему не изменить протокол с приватными функциями и обязать вместо int возвращать ResultCodeSetter

?

Constantine
16.06.2017
14:39:20
а если мне нужен не MoveConstructible параметр из scope, мне вложение строить каждый раз?

Google
Александр
16.06.2017
14:40:23
каждый выход из функции ОБЯЗАН указать значение
можно сделать возвращаемое значение типа struct Foo, лямбду auto ret = [&](auto res) { err_code = res; return Foo{}; }; и тогда вернуться из функции можно будет только через return ret(-1);

Constantine
16.06.2017
14:43:55
так-то понятно, что я могу написать auto вместо void и сказать auto end_function = [&](int return_code) -> std::integral_constant<int, __LINE__> { /*use everything I want*/ return {}; };

Александр
16.06.2017
14:45:15
ну вот

Дед Пегас
16.06.2017
14:46:41
Чо нашёл! https://github.com/stlab/libraries

Constantine
16.06.2017
14:47:08
ну вот
а если у меня функция должна не void вернуть, а осмысленное значение?

Александр
16.06.2017
14:47:49
Constantine
16.06.2017
14:48:10
да, только теперь у меня нет возможности блокировать явный возврат

Constantine
16.06.2017
14:49:14
std::tuple?
std::tuple<auto, int> в каком стандарте компильнется?

Sergey
16.06.2017
14:49:44
это как вообще, лол

Constantine
16.06.2017
14:50:36
я о том же

Igor
16.06.2017
14:51:13
чёт ум за разум заходит уже, зачем auto, вроде ж речь шла про то чтобы переписать ?, не?

void SomeFunction() { if (path1) { exit_code = 1; return; } if (path2) { exit_code = 2; return; } if (path3) { exit_code = 3; return; } }

Constantine
16.06.2017
14:51:42
текущий чит auto SomePublicFunction(); //impl auto end_function = [&](int return_code) -> std::integral_constant<int, __LINE__> { /*use everything I want*/ return {}; }; if (path1) return end_function(1);

Igor
16.06.2017
14:51:42
только для функции с типом вместо void

Constantine
16.06.2017
14:53:12
и аналогичный чит не сработает, если возврат был не void

Владислав
16.06.2017
14:55:26
шото я совсем перестал понимать

Constantine
16.06.2017
14:57:52
что тут непонятного? мне нужен SCOPE_EXIT, требующий параметр при EXIT

деструктор с параметром меня бы устроил :) (нет)

Igor
16.06.2017
15:00:16
а параметр будет определён в процессе выполнения функции?

Google
Aidar
16.06.2017
15:00:37
Constantine
16.06.2017
15:01:41
а параметр будет определён в процессе выполнения функции?
параметр зависит от ветки возврата, так что да

Arseny
16.06.2017
15:02:56
что тут непонятного? мне нужен SCOPE_EXIT, требующий параметр при EXIT
Непонятно чем плох вариант с функцией или лямбдой. Но чисто гипотетически вопрос любопытный.

Constantine
16.06.2017
15:03:23
Непонятно чем плох вариант с функцией или лямбдой. Но чисто гипотетически вопрос любопытный.
грубо говоря, мне приходится делать построение с новым скоупом и лямбдой, чтобы захватить параметры правильно

Igor
16.06.2017
15:03:34
локально для функции определить класс с деструктором и параметром, создать объект, начать выполнять ветки, дойти до конца, проинициализировать параметр в объекте и вернуть что нужно?

Constantine
16.06.2017
15:04:08
void func(){ SomeNotMCType object; return_code = [&]() -> int { }(); return_code = object.remap(return_code); }

Igor
16.06.2017
15:04:09
или в деструкторе тоже нужно завязываться на происходящее в ветках?

Constantine
16.06.2017
15:04:14
ну это немного изврат

Aidar
16.06.2017
15:06:17
выносмозга-ориентированное программирование

Constantine
16.06.2017
15:06:43
вот что-то такое

почему блин плюсам нельзя предоставить формальное доказательство, что данный std::unique_ptr в данной точке будет nullptr и чтобы в этом случае плюсы не синтезировали вызов десктрутора? :(

Дед Пегас
16.06.2017
15:15:34
+

Constantine
16.06.2017
15:15:42
нужны dependent types
что это и с чем едят?

Aldar
16.06.2017
15:16:12
что это и с чем едят?
новая наркота

Constantine
16.06.2017
15:17:53
О! Да это же то, о чем я всю жизнь мечтал

Vladislav
16.06.2017
15:18:00
что это и с чем едят?
https://en.wikipedia.org/wiki/Curry%E2%80%93Howard_correspondence

Aldar
16.06.2017
15:18:14
https://t.me/haskellru

как раз тут idris обсуждают с зависимыми типами

Google
Constantine
16.06.2017
15:20:18
я не хочу программировать на хаскеле, я хочу определить struct unique_ptr { constexpr bool magic_word not_null() const { return inner != nullptr; } constexpr bool magic_word surely_null() const { return inner == nullptr; } surely_null unique_ptr(nullptr_t) { inner = nullptr; } ~unique_ptr() { delete inner; } ~unique_ptr() surely_null { } }; и потом писать not_null unique_ptr ptr = make_unique();

такое можно подмутить на шаблончиках, но слегка упорешься

хуже того, есть проблема, что я не могу изменить тип переменной внутри метода

Anatoly
16.06.2017
15:29:30
как вообще оно у тебя в блоке nullptr стало?

а... всё ок

не знаю, как у тебя, а у меня /// Destructor, invokes the deleter if the stored pointer is not null. ~unique_ptr() noexcept { auto& __ptr = std::get<0>(_M_t); if (__ptr != nullptr) get_deleter()(__ptr); __ptr = pointer(); }

Constantine
16.06.2017
15:33:49
я примерчик пишу

и я хочу, чтобы { unique_ptr ptr = nullptr; } //deleter не вызван и не инстанцирован

Anatoly
16.06.2017
15:35:12
а где он вызывается?

Constantine
16.06.2017
15:35:43
вот так даже

Admin
ERROR: S client not available

Constantine
16.06.2017
15:36:25
потому что ежу понятно, что в этом месте указатель будет на nullptr

Anatoly
16.06.2017
15:37:00
зачем ты пишешь deleter-ы, которые нельзя инстанцировать?)

Anatoly
16.06.2017
15:37:05
это информация рантайма

в любой момент я могу написать ptr.reset(new T);

Constantine
16.06.2017
15:37:49
это информация рантайма
В языке C++ есть cv-qualifier. Если дописать в язык C++ еще один такой же user-defined qualifier, ничего не сломается

Anatoly
16.06.2017
15:38:39
но пу сути это уже совсем другой интерфейс должен быть, а не то что предоставляет unique_ptr

напиши null_unique_ptr который не будет требовать deletor

Constantine
16.06.2017
15:39:35
напиши null_unique_ptr который не будет требовать deletor
и выяснится, что я не могу модифицировать тип объявленной переменной

Anatoly
16.06.2017
15:40:13
ты плюсы путаешь с другим языком, в котором можно модифицировать типы переменных

Google
Constantine
16.06.2017
15:41:00
я ничего не путаю, нет ни одной причины, по которой компилятор не может вычислять аналог user-defined cv-qualifier на этапе компиляции с модификацией фактического типа переменной

Anatoly
16.06.2017
15:42:02
но ему по сути надо проследить дальшейшие цепочки, в которых используется этот объект, чтобы убедится в том, что нелегальных вызовов нет, в которых потребуется деструктор

Constantine
16.06.2017
15:42:36
ему нужно будет вычислить фактический qualifier на момент вызова деструктора

после чего выполнить вызов функции точно так же, как производится выбор функции при наличии cv

Дед Пегас
16.06.2017
15:44:35
Просто вам нужен Haskell

Constantine
16.06.2017
15:44:49
мне не нужен хаскель

Anatoly
16.06.2017
15:45:00
хаскель ему не поможет

Constantine
16.06.2017
15:45:05
я думаю, что существуют причины, по которым есть примерно 0 серьезных проектов на хаскеле

Anatoly
16.06.2017
15:45:24
какая ложь...

Дед Пегас
16.06.2017
15:45:43
Constantine
16.06.2017
15:46:21
какая ложь...
в списке applications на википедии целых 7

Anatoly
16.06.2017
15:46:42
опенсорс?

Constantine
16.06.2017
15:48:31
хочу увидеть проект на больше 10М кода на хаскеле

Anatoly
16.06.2017
15:48:36
folly только студией собирается? Кто-нибудь пробовал msys2 ?

на х-ле не нужно столько кода писать, бро

суть правильных языков

Friedrich
16.06.2017
15:49:17
Друзья, преимущества хаскеля вы можете обсудить в хаскелечате.

Constantine
16.06.2017
15:49:30
тогда можно доказательство, что код на хаскелле занимает в объеме в 100 раз меньше, чем аналогичный на плюсах

reagentoo
16.06.2017
15:50:08
Constantine
16.06.2017
15:50:12
и тогда 1М кода на хаскеле

Friedrich
16.06.2017
15:50:36
Там строго
Так и тут строго!

и давно у тебя здесь мигалка?
Сколько себя помню.

Страница 969 из 2477