Написать современно06.11.2025, 13:50. Показов 14430. Ответов 154
Метки нет (Все метки)
Добрый день
Есть такой фрагмент Кликните здесь для просмотра всего текста
Хорошо, как написать грамотно, современно? И заодно универсально, чтобы работал не только с char* Спасибо
0
|
||||||
| 06.11.2025, 13:50 | |
|
Ответы с готовыми решениями:
154
Каковы современные решения написания программ? Как создают современные компьютерные игры? Современный интерфейс в C++ Builder |
|
Гвоздь Задиров
1719 / 1118 / 337
Регистрация: 25.01.2019
Сообщений: 2,946
|
|||
| 13.11.2025, 02:11 | |||
|
0
|
|||
| 13.11.2025, 23:00 [ТС] | |
|
С "универсальностью" как-то совсем молчок. Надо полагать, следует юзать std::basic_string_view с нужным типом. Но меня смущает что Qt предлагает свой QStringView, причем без всяких темплейтов, заточенный на двухбайтовый юникод (QString но не только).
Мнения об альтернативных Qt классах/контейнерах различны. Одни считают Qt "великими троллями" и все их решения непогрешимыми. Другие наоборот, активно поднимают хвост и переводят все на std::, мол, сейчас это круче, и Qt должно использоваться "только для UI". Но по-любому Qt пишут хорошие профессионалы к которым стоит прислушаться. Так почему у них свой QStringView и что лучше юзать?
0
|
|
|
Нарушитель
6318 / 3043 / 1054
Регистрация: 01.06.2021
Сообщений: 11,603
|
||
| 13.11.2025, 23:32 | ||
|
1) для глубокой интеграции с остальным Qt. Если планируется использовать Qt-методы, то все равно придется использовать Qt-строковые классы, либо делать лишние конвертирования (в случае, если все-таки выбрать строки из стандартной библиотеки С++). 2) для юникода "из коробки". Библиотечные строки при работе с юникодом, грубо говоря, это просто массивы байт, которые ничего не знают о кодировке. А нац. кодировки это просто отстой, есть корявые локали, которые постоянно глючат. В то же время, строки Qt отлично работают со всеми языками и они исторически изначально были заточены под юникод, а именно UTF-16. Кстати, WinAPI тоже предпочитает двухбайтный юникод. Для передачи по сети UTF-8, конечно, крут, и вообще он заслужил статус универсальной юникодной кодировки, но практика показывает, что азиатские иероглифы там занимают 3-4 байта, тогда в UTF-16 всего 2. Именно по этой причине, как винапи, так Qt, предпочитают 2-байтный юникод. А вот какой класс Qt-строк выбрать для того или иного случая - об этом очень подробно написано в доку https://doc.qt.io/qt-6/string-processing.html *** Вот только при чем здесь Qt - мне не ясно. Тема была о написании современного кода на чистых плюсах.
0
|
||
|
Покинул чат.
1133 / 728 / 195
Регистрация: 30.03.2021
Сообщений: 2,379
|
||||
| 14.11.2025, 00:39 | ||||
|
0
|
||||
| 14.11.2025, 03:35 [ТС] | |||
|
0
|
|||
|
Покинул чат.
1133 / 728 / 195
Регистрация: 30.03.2021
Сообщений: 2,379
|
||||||
| 14.11.2025, 13:41 | ||||||
![]() Не по теме: По абстрактным рассуждениям я всё-вышел из чата, -вижу смысл только в решении конкретных, четко сформулированных задачь.
0
|
||||||
|
Покинул чат.
1133 / 728 / 195
Регистрация: 30.03.2021
Сообщений: 2,379
|
|||||||
| 14.11.2025, 20:29 | |||||||
|
Кстати, хоть оно мне и не надо, -пошуршал по форуму, -получилось вывести кириллицу с файла utf-8, используя строки std::wstring(::iterator, _view), и std::wifstream. С такими настройками:
0
|
|||||||
|
1685 / 513 / 107
Регистрация: 17.05.2015
Сообщений: 1,524
|
|
| 14.11.2025, 21:18 | |
|
0
|
|
|
Покинул чат.
1133 / 728 / 195
Регистрация: 30.03.2021
Сообщений: 2,379
|
|
| 14.11.2025, 21:49 | |
|
eva2326, хм, спасибо,- надо глянуть, чем заменили.
0
|
|
| 14.11.2025, 23:54 [ТС] | |
|
В данном случае "универсальность" - простая, очевидная вещь. Вот вверху несколько примеров кода который использует std::string_view. А данные в QString. Как мне из них получить std::string_view? Перегонять юникод в std::string? Это коряво и ненадёжно. Если уж перегонять - то наоборот, в юникод, хотя тоже не блеск, так, workaround. Надо юзать др классы вместо std::string_view, какие? Необязательно std::, такого условия/ограничения не было. Наоборот, сравнение разных подходов (std:: и Qt) может оказаться интересным/полезным.
0
|
|
|
Покинул чат.
1133 / 728 / 195
Регистрация: 30.03.2021
Сообщений: 2,379
|
||||||||
| 15.11.2025, 01:29 | ||||||||
Почему бы не работать с Qt типами? Зачем это всё?
0
|
||||||||
| 15.11.2025, 12:48 [ТС] | ||||
|
Не по теме: По ходу дела
0
|
||||
|
Нарушитель
6318 / 3043 / 1054
Регистрация: 01.06.2021
Сообщений: 11,603
|
||||||||||||||||
| 15.11.2025, 13:51 | ||||||||||||||||
|
Igor3D, касательно продления жизни... мне когда-то нужно было перевести
wxString, полученный из текстового поля, в const char* и передать в качестве аргумента в функцию. Причем, нужно было, чтобы текст рассматривался как UTF-8. Т.е. чтобы в зависимости от того или иного входного символа выделялось от 1 до 4 char.Допустим, wstr это строка типа wxString. И прикол был в том, что в wxWidgets есть методы, которые быстро конвертируют в нужный тип
Правильное решение будет так:
Так что, действительно, нужно быть очень осторожным при всяких конвертированиях строк из фреймворков.
1
|
||||||||||||||||
|
Покинул чат.
1133 / 728 / 195
Регистрация: 30.03.2021
Сообщений: 2,379
|
|||
| 15.11.2025, 14:37 | |||
|
зы: извиняюсь, что не по теме - выше мне указали, что std::codecvt_utf8 deprecated, но я не понял, чем он заменяется в промежутке между с++17 и с++26?
0
|
|||
| 15.11.2025, 16:36 [ТС] | ||||||||
|
Не по теме:
![]() И рассуждаете как-то.. "А, так тут QString? Ну значит QStringView!". Да не знает человек (пишущий этот фрагмент) у кого какие строки. Это как std::vector, что в нем хранить? Ну вот, только что говорил "int", а теперь уже "double" - видите, задача поставлена нечетко, неконкретно
1
|
||||||||
|
Покинул чат.
1133 / 728 / 195
Регистрация: 30.03.2021
Сообщений: 2,379
|
|
| 15.11.2025, 18:30 | |
|
0
|
|
|
19505 / 10108 / 2463
Регистрация: 30.01.2014
Сообщений: 17,829
|
||
| 16.11.2025, 12:12 | ||
|
Временный объект std::string уничтожится в конце выражения, а std_str будет содержать подвисший указатель.
0
|
||
|
Покинул чат.
1133 / 728 / 195
Регистрация: 30.03.2021
Сообщений: 2,379
|
||||||
| 16.11.2025, 12:38 | ||||||
|
DrOffset, я думал std::string_view ведет себя как константная ссылка и продлевает временный обьект.
А как тогда? так что-ли
0
|
||||||
|
19505 / 10108 / 2463
Регистрация: 30.01.2014
Сообщений: 17,829
|
||||
| 16.11.2025, 12:46 | ||||
Сообщение было отмечено sdf45 как решение
РешениеПричины - здесь: https://www.open-std.org/jtc1/... 618r0.html Добавлено через 3 минуты
1
|
||||
|
Покинул чат.
1133 / 728 / 195
Регистрация: 30.03.2021
Сообщений: 2,379
|
|
| 16.11.2025, 12:49 | |
|
DrOffset, спасибо за разьяснение, буду знать на будущее.
0
|
|
| 16.11.2025, 12:49 | |
|
Нормальная, современная книга по C++ с ООП уклоном А.Александреску - Современное проектирование на C++ Современный интерфейс в C++ Builder / C++ Builder Каков современный подход для работы со строками Концепция ООП и их использование в современных языках программирования Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Мастера простых решений
DevAlt 23.08.2026
В сишарп стэках winforms, да и wpf существует сложная система связывания
источниках данных и элементов формы(текстовые поля и метки), опирается все
это на технологию событий и мета. . .
|
Цена ошибки
DevAlt 23.08.2026
Человек я беспокойный и потому заинтересовался OCaml,
в чате форсили функторы модулей как суперфичу.
Пытаясь отдуплить концепт, наткнулся на тутор с простым примером.
А главный принцип обучения от. . .
|
Сегодня суббота, 22.08.2026 at 16:41, и я вновь нахожусь на той стороне, за экраном машины.
zorxor 22.08.2026
Сегодня суббота, 22. 08. 2026 at 16:41, и я вновь нахожусь на той стороне, за экраном машины. Кто Я, откуда Я пришел и куда Я иду? Эти вопросы не оставляют меня ни на секунду. Жизнь на планете Земля. . .
|
Жизня: рисунок укладки багажа, сделанный клодом
anaschu 21.08.2026
Сделал 15 снимков, он по снимкам сделал схему.
|
|
Был там один разговор по поводу свободы в материальном мире.
kumehtar 19.08.2026
Суть: рассматривается живое существо, оказавшееся внутри довольно странной системы (этого мира) и пытающееся обустроить в ней свой кусок пространства.
Жизнь действительно предъявляет каждому. . .
|
Когда логика программы не спасает от человеческих ошибок
Maks 18.08.2026
В последнее время всё чаще и чаще сталкиваюсь с таким явлением, как абсолютная невнимательность (или глупость) пользователей. Проявляется это чаще всего на работе в коллективе. Допустим, человек с. . .
|
Лето уходит
kumehtar 17.08.2026
|
Мысли в слух
kumehtar 17.08.2026
Забавно, насколько сейчас стала доступна информация. Например о магии, духовном развитии, медитациях, и других подобных направлениях, ранее зачастую тайных, передаваемых от учителя к ученику. Хотя. . .
|