170 похожих чатов

Да, в меню я уже так и сделал методом проб

и ошибок)) Но вот вопрос. Есть функция:
int inputfirstsystem(string allowed) // Ввод системы
{
int system = 0;
string systemstring;
cout << "\nВведите исходную систему: ";
getline(cin, systemstring);
if (check(systemstring, allowed) == 1) // Проверка строки
{
inputfirstsystem(allowed);
return system;
}
system = toDec(systemstring, 10); // Перевод строки в число
if (system < 2 || system > 16)
{
cout << "\nВведите значение от 2 до 16!\n";
inputfirstsystem(allowed);
return system;
}
return system;
}
https://prnt.sc/102pidu Через отладчик проверил, что при таком вводе, когда несколько раз неправильно, а потом правильно (10), выводится все хорошо, но вот возвращает в функцию, где она вызывается, не 10, а 0. Как быть? Чтоб 10 возвращалось.

25 ответов

7 просмотров

та же проблема

вам в функциональное программирование надо попробовать, ход мысли как раз туда =)

вероятно, заменить inputfirstsystem(allowed); return system; на return inputfirstsystem(allowed);

Oleg
я только учусь)

Фп пригодится в любом случае

Liber Azerate
Фп пригодится в любом случае

Сейчас ФП в плюсах получше, чем во времена C++03, но, все равно по большей части смертоубийство, может в С++26 или C++30 станет удобней, а может появится что-то еще и мода на ФП пройдет. Просто для справки: 1 что есть из ФП в C++ - Функции как объект первого класса (а значит, функции высшего порядка), декомпозиция POD, лямбды, автоматический вывод типов (но синтаксис многословный аки java, раньше везде был явный тип теперь везде auto, видел сравнение плюсов с каким то ФП языком (кажется, Scala - auto вместо val просто убило). Чего нет из ФП - тайпклассы (можно организовать похожее поведение, но в большинстве случаев вынос мозга гарантирован), паттерн-матчинг (Страуструп и студенты пытаются придумать, последнее что я видел, мозг не выносит, но делает очень много лишних движений), каррирование (если очень хочется, то можно, но сложно).

Mikhail Kalugin
Сейчас ФП в плюсах получше, чем во времена C++03, ...

Я бы добавил сюда ленивость и шаблоны. Да и тайпклассы действительно можно организовать, но да, не хватает, конечно

Liber Azerate
Я бы добавил сюда ленивость и шаблоны. Да и тайпкл...

Вот кстати, интересно стало: в C++ шаблоны всегда инвариантны или есть какой-то способ это обойти?

Mikhail Kalugin
Вот кстати, интересно стало: в C++ шаблоны всегда ...

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

Mikhail Kalugin
Вот кстати, интересно стало: в C++ шаблоны всегда ...

Тот же shared_ptr или аллокаторы это обходит всё же как-то, если подумать

Liber Azerate
Тот же shared_ptr или аллокаторы это обходит всё ж...

С другой стороны, типы-то всё равно инвариантны

Liber Azerate
С другой стороны, типы-то всё равно инвариантны

Ну вот и мне так кажется, похожего поведения можно добиться определя приведения типов явно, но обобщенного способа пока нет...

Mikhail Kalugin
Вот кстати, интересно стало: в C++ шаблоны всегда ...

А можно небольшое пояснение, что имеется ввиду под инвариантностью шаблонов?

Mikhail Kalugin
Scala List[+T]

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

Mikhail Kornaukhov
если как нибудь оператор приведения написать испол...

Да, я вроде выше так и написал - выводить приведение самому как-то.

Ofee Oficsu
А можно небольшое пояснение, что имеется ввиду под...

Извини, сейчас немного занят, если нужны детали - чуть позже, или кто-то еще сможет ответить.

Mikhail Kalugin
Извини, сейчас немного занят, если нужны детали - ...

Спасибо, я нужную информацию нашёл. Пока что я также склоняюсь к оператору приведения. Код более или менее выразительным можно сделать за счёт шаблонов, да

Mikhail Kalugin
Вот кстати, интересно стало: в C++ шаблоны всегда ...

Если я правильно понял саму концепцию (без подготовки сходу оказалось непросто переложить концепцию полиморфизма через трейты на плюсовый полиморфизм через наследование), то можно сделать CRTP-обёртку, которая заставит наши типы вести себя как какой-то другой тип (например, какой-нибудь из стандартных контейнеров). Вот пример реализации такой обёртки для контейнеров. Новый контейнер, поддерживающий выбор вариантности пишется в 4 строки, ведя при этом как настоящий. При желании можно и что-то более обобщённое написать Ну и очевидное наблюдение — стандартные умные указатели изначально не инвариантны ¯\_(ツ)_/¯ На что я только убил последние часа 3 своего существования...

Ofee Oficsu
Если я правильно понял саму концепцию (без подгото...

А можно для самых маленьких, в чем там неинвариантность?

Fake Dude
А можно для самых маленьких, в чем там неинвариант...

По умолчанию все инстансы шаблонов в C++ инвариантны и следующий код не работает std::vector<Base> x = std::vector<Derived>{}; Я привёл пример обёртки, которая позволяет написать свои контейнеры, позволяющие выбрать поведение одним из двух способов (указать, что исходный вектор ковариантен или указать, что вектор назначения контравариантен)

Ofee Oficsu
По умолчанию все инстансы шаблонов в C++ инвариант...

Я так и думал, спасибо. Только вашем примере разные инстансы, а не шаблоны)

Fake Dude
Я так и думал, спасибо. Только вашем примере разны...

Да, пожалуй, у меня в формулировке закралась ошибка

Mikhail Kalugin
Сейчас ФП в плюсах получше, чем во времена C++03, ...

Ничего не смертоубийство, с ranges так вообще огонь, да ещё и stl на место ставит

Похожие вопросы

Обсуждают сегодня

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Гайс, вопрос для разносторонее развитых: читаю стрим с юарта, нада выделять с него фреймы с определенной структурой, если ли чо готовое, или долбаться с ринг буффером? нада у...
Vitaly
9
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
длина пакета фиксированная, или меняется?
Okhsunrog
7
Карта сайта