Неэпический
|
|||||||||||||||||||||
1 | |||||||||||||||||||||
Обертка над boost::lexical_cast для работы с unsigned типами31.01.2016, 15:29. Показов 3862. Ответов 23
Пару дней назад выяснилось, что boost::lexical_cast
не удовлетворяет нескольким требованиям в моей программе. boost::lexical_cast отказывается обрабатывать и выбрасывает исключение, если имеются пробелы в начале или в конце входной строки. Также для unsigned типов, отрицательные значения обрабатываются нормально, т.е., например, boost::lexical_cast<unsigned int>("-1") даст вполне валидное значение.Для моих целей эти два факта были неприемлемы. Собственно, Ticket #5494 как раз об этом, и там был представлен такой велосипед:
а ведь "-0", как и "+0" - вполне валидные значения. Поэтому был написан велосипед:
Использование:
P.S. Спасибо пользователям Kastaneda и hoggy за правки и дополнения. Добавлено через 31 минуту Вариант под C++11:
4
|
31.01.2016, 15:29 | |
Ответы с готовыми решениями:
23
Обертка над boost::asio Namespace boost не содержит члена lexical_cast Обертка над C библиотекой Обертка над Си библиотекой |
hoggy
|
31.01.2016, 16:32
#2
|
Не по теме: *утащил в свою коллекцию семплов*
0
|
8972 / 4318 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
|
|
31.01.2016, 16:38 | 4 |
0
|
8972 / 4318 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
|
||||||
31.01.2016, 20:42 | 6 | |||||
http://rextester.com/RUFT62725
1
|
8972 / 4318 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
|
|
31.01.2016, 21:12 | 8 |
0
|
Неэпический
|
||||||
01.02.2016, 03:33 [ТС] | 9 | |||||
Ну вот универсальный код для Glib::ustring не прокатит
О, как! Немного переделал Ваш и добавил свой. detail не менял.
Блин, ошибся немного. Забыл вырубить шаблон ustring upd: поменял код
1
|
Неэпический
|
|||||||||||||||||||||
01.02.2016, 03:33 [ТС] | 10 | ||||||||||||||||||||
С учетом дополнений из темы Применение is_same для списка типов
Немного доработал код. Добавил два макроса:
TYPE_LIST_CV - добавляет к типу квалификаторыIGNORING_TYPES - список типов, которые должны игнорироваться основным шаблономНемного переработал основной шаблон string_cast , для учета указанных игнорируемых типов:
string_cast для какого-либо типа,необходимо добавить тип в список игнорируемых (если требуется игнорировать типы со всеми квалификаторами, то можно использовать TYPE_LIST_CV ), и такжедобавить string_cast с этой "особой" реализацией, добавив в is_one_same соответствующий тип.Например, вот реализация:
причем, типов, включающих одну такую "специализацию" может быть несколько, например,
TYPE_LIST_CV(Glib::ustring) и TYPE_LIST_CV(char*)
0
|
01.02.2016, 18:57 | 11 |
Не по теме: Да, а С++ до сих пор нет нормальных функций для преобразования ходовых типов с учетом всех возможных вариантов, к примеру локали. Добавлено через 7 минут Что касается сути, то не проще ли использовать сначала регулярку потом каст, если регулярка прошла ?
0
|
8972 / 4318 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
|
|
01.02.2016, 19:01 | 12 |
я так и не понял, что вы пытаетесь построить?
Добавлено через 2 минуты Не по теме: хз, что значит:
0
|
hoggy
|
01.02.2016, 20:51
#14
|
Не по теме: с датой проще. можно указывать регулярки для кастов туда/сюда. с циферками наверное что-то подобное должно быть. просто это с локалью напрямую никак не связанно. локали отвечают за национальные символы. и это - глобальный головняк. а не только плюсовый. что до плюсов, то местные локали/фасеты/прочий калл - эпический фейл. вылечить который можно лишь полным пересмотром всей той части архитектуры стандартной библиотеки, которая отвечает за работу со строками. полагаться на плюсовую локаль нельзя категорически.
0
|
01.02.2016, 21:16 | 15 | |||||
Я делаю обычно это в С++Builder так
Т.е. сравнительно просто. http://docwiki.embarcadero.com... atSettings
0
|
02.02.2016, 07:19 | 16 | |||||
boost:: ptime умеет форматировать даты по строкам типа
"%mm-%dd-%yyyy" . У меня тип для даты используется совершенно левый, поэтому есть свой велосипед перегоняющий boost:: ptime в мой тип. Есть такой мап, который по языку системы возвращает шаблон даты
0
|
8972 / 4318 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
|
|
02.02.2016, 08:48 | 17 |
0
|
02.02.2016, 11:05 | 19 |
А как язык и формат данных даты связаны?
Никак... фэйл... Точно так же как формат даты и десятичный разделитель. Просто иногда нужно отображать в том формате в каком система, а обрабатывать в другом например если данные берутся с сайта.
0
|
02.02.2016, 11:11 | 20 |
??? От языка пользователя зависит формат даты, времени, плавающая точка и т.д.
Добавлено через 3 минуты У меня веб-приложение, юзеру нужно показать дату в его формате, бразуер в HTTP запросе посылает язык пользователя, по языку определяется в каком виде ему показывать дату. Если всем показывать в одном формате, то русский и американец поймет эту запись 3/2/2016 совершенно по-разному.
0
|
02.02.2016, 11:11 | |
02.02.2016, 11:11 | |
Помогаю со студенческими работами здесь
20
Обертка над INotifyPropertyChanged Обёртка над WinAPI Обёртка над WinApi платно Обертка над массивом double[] Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |