Russian Qt Forum
Ноябрь 22, 2024, 07:06 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1] 2 3 4   Вниз
  Печать  
Автор Тема: Compile-time определение реверсивности итератора (reverse_iterator)  (Прочитано 19301 раз)
AkonResumed
Чайник
*
Offline Offline

Сообщений: 81


Просмотр профиля
« : Апрель 03, 2021, 06:47 »

Имеем такой шаблон функции, где нужно в зависимости от того, прямой на входе итератор или реверсивный (reverse_iterator) генерировать ту или уную константу:
Код:
template <typename IteratorT>
static void shiftWeeks(IteratorT begin, IteratorT end)
{
    ....
    static const int DayStep = 7 * (IsReverseIterator<IteratorT> ? -1 : 1);
    ....
}

Задействовать контейнер (подавать его на вход функции) нельзя.

Пока что прицепился к reverse_iterator::base() - этой функции нет у iterator:
Код:
template <typename, typename = void>
inline constexpr bool IsReverseIterator = false;

template <typename T>
inline constexpr bool IsReverseIterator<T, std::void_t<decltype(std::declval<T>().base())>> = true;

В С++17 более никаких compile-time отличий не нашел (а хотелось бы какой-нибудь тэг направления). Допускаю, что что-то пропустил. И, кто уже юзает C++20, - как там в плане новшеств этом вопросе?
Записан
m_ax
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2095



Просмотр профиля
« Ответ #1 : Апрель 07, 2021, 15:09 »

Цитировать
В С++17 более никаких compile-time отличий не нашел (а хотелось бы какой-нибудь тэг направления). Допускаю, что что-то пропустил. И, кто уже юзает C++20, - как там в плане новшеств этом вопросе?
Не знаю, что там в 20 стандарте, но похоже, ничего другого, кроме как зацепиться за base() не остаётся..
Да, хотелось бы, чтоб в iterator_traits был teg типа: revers_ iterator_tag, но увы.. (даже не представляю, как это можно реализовать..)
« Последнее редактирование: Апрель 07, 2021, 15:19 от m_ax » Записан

Над водой луна двурога. Сяду выпью за Ван Гога. Хорошо, что кот не пьет, Он и так меня поймет..

Arch Linux Plasma 5
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #2 : Апрель 07, 2021, 15:22 »

[off]Недавно пришлось "собирать" больше десятка приложений чтобы посмотреть "как это там сделано". Прослеживается четкая зависимость: где больше С++ 17 и.т.п. - там меньше мыслей (вернее вообще нет, что-то придумать даже не пытался). Конечно "лучше быть богатым и здоровым", но голова-то одна. Ни к чему "через край" жрать этот сахар
[/off]
Записан
m_ax
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2095



Просмотр профиля
« Ответ #3 : Апрель 07, 2021, 15:36 »

Цитировать
[off]Недавно пришлось "собирать" больше десятка приложений чтобы посмотреть "как это там сделано". Прослеживается четкая зависимость: где больше С++ 17 и.т.п. - там меньше мыслей (вернее вообще нет, что-то придумать даже не пытался). Конечно "лучше быть богатым и здоровым", но голова-то одна. Ни к чему "через край" жрать этот сахар
[/off]
Ну тут я не вправе Вам что-то советовать.. Решайте сами  Улыбающийся

P.S.
На мой вкус, решение приведённое выше, весьма адекватное..
« Последнее редактирование: Апрель 07, 2021, 15:44 от m_ax » Записан

Над водой луна двурога. Сяду выпью за Ван Гога. Хорошо, что кот не пьет, Он и так меня поймет..

Arch Linux Plasma 5
Old
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4350



Просмотр профиля
« Ответ #4 : Апрель 07, 2021, 16:00 »

Прослеживается четкая зависимость: где больше С++ 17 и.т.п. - там меньше мыслей (вернее вообще нет, что-то придумать даже не пытался).
Вам так показалось потому, что вы не поняли что там написано. Улыбающийся
Большинству разработчиков не повезло так как вам, им не достаточно для выражения всех своих мыслей, использовать только QVector и циклы с индексами. Улыбающийся
Записан
m_ax
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2095



Просмотр профиля
« Ответ #5 : Апрель 07, 2021, 16:20 »

Я согласен.. Тут просто других вариантов просто тупо нет..
Записан

Над водой луна двурога. Сяду выпью за Ван Гога. Хорошо, что кот не пьет, Он и так меня поймет..

Arch Linux Plasma 5
m_ax
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2095



Просмотр профиля
« Ответ #6 : Апрель 08, 2021, 00:13 »

AkonResumed Вы не обращайте внимания.. У нас тут подобного рода дебаты  - это нормально  Улыбающийся
Записан

Над водой луна двурога. Сяду выпью за Ван Гога. Хорошо, что кот не пьет, Он и так меня поймет..

Arch Linux Plasma 5
Racheengel
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2679


Я работал с дискетам 5.25 :(


Просмотр профиля
« Ответ #7 : Апрель 14, 2021, 17:11 »

Большинству разработчиков не повезло так как вам, им не достаточно для выражения всех своих мыслей, использовать только QVector и циклы с индексами. Улыбающийся

На самом деле проблема то более глубокая.
QVector и циклы с индексами поймёт, пожалуй, 10 из 10 разрабов (даже которые C++ не видели).
std::void_t<decltype(std::declval<T>().base())>> и иже с ними - ну, скажем, 5 из 10, что видели C++ (по личному наблюдению).
Пофиксить возникшие баги смогут 2-3 из них.
Какой вариант выберет бизнес, которому надо "всё и быстро"?
Записан

What is the 11 in the C++11? It’s the number of feet they glued to C++ trying to obtain a better octopus.

COVID не волк, в лес не уйдёт
AkonResumed
Чайник
*
Offline Offline

Сообщений: 81


Просмотр профиля
« Ответ #8 : Апрель 14, 2021, 21:31 »

Racheengel, вы абсолютно правы. Бизнес выберет что-нибудь типа Java. И это будет лучшим для него выбором. Более того, если утвержден некий "потолок сложности" в проекте, то все попытки выхода за него должны неумолимо пресекаться.

Просто, как и много где, есть сегментация. С++ с современными шаблонами - это ближе к high-end.

Записан
Racheengel
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2679


Я работал с дискетам 5.25 :(


Просмотр профиля
« Ответ #9 : Апрель 15, 2021, 10:09 »

Racheengel, вы абсолютно правы. Бизнес выберет что-нибудь типа Java. И это будет лучшим для него выбором. Более того, если утвержден некий "потолок сложности" в проекте, то все попытки выхода за него должны неумолимо пресекаться.

Просто, как и много где, есть сегментация. С++ с современными шаблонами - это ближе к high-end.

Да, Java как мейнстрим, или шарп.
Но для high-performance систем бизнес скорее всё-таки выберет Embedded/C/C++.
И "потолок сложности", а скорее критерий приемлемости, по сути определяется несколькими факторами, главные из которых - производительность, стабильность и поддерживаемость кода.
Дают ли "современные шаблоны" преимущество в этих аспектах? Наверное, скорее нет.
Во всяком случае код "на шаблонах" вряд ли будет быстрее кода "на векторах и циклах".
А если посмотреть на медицинскую отрасль - то там даже наследование не всегда разрешается использовать.

(отредактирую пожалуй, а то начались разночтения: high-end != high-performance)
« Последнее редактирование: Апрель 15, 2021, 10:35 от Racheengel » Записан

What is the 11 in the C++11? It’s the number of feet they glued to C++ trying to obtain a better octopus.

COVID не волк, в лес не уйдёт
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #10 : Апрель 15, 2021, 10:12 »

std::void_t<decltype(std::declval<T>().base())>> и иже с ними - ну, скажем, 5 из 10, что видели C++ (по личному наблюдению).
Пофиксить возникшие баги смогут 2-3 из них.
То да. Конечно разобраться с таким вумным кодом можно. Более того, это даже интересно. Напр я ничего не слышал о declval, прочел эту тему, открыл справочник - оказывается и так можно! Но это совершенно непроизводительная, непродуктивная и.т.п. растрата времени и интеллектуальных ресурсов.

И дополню: больше всего страдает сам вумник. Ведь время и силы, затраченное на "достижение совершенства"  берутся из проекта/задачи, связь с которой знаток быстро теряет. А приобретенные обширные познания этого отнюдь не компенсируют.

В общем, все хорошо в меру  Улыбающийся

Просто, как и много где, есть сегментация. С++ с современными шаблонами - это ближе к high-end.
Что такое high-end ?
Записан
Racheengel
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2679


Я работал с дискетам 5.25 :(


Просмотр профиля
« Ответ #11 : Апрель 15, 2021, 10:35 »

Хм, кстати по поводу high-end: кэмбриждский словарь определеят эту фразу как "used to describe a business that makes or sells expensive products".
То есть в случае софта, поддержка подобных продуктов обойдётся очень дорого, что в принципе правда.
Записан

What is the 11 in the C++11? It’s the number of feet they glued to C++ trying to obtain a better octopus.

COVID не волк, в лес не уйдёт
Old
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4350



Просмотр профиля
« Ответ #12 : Апрель 15, 2021, 10:52 »

Но это совершенно непроизводительная, непродуктивная и.т.п. растрата времени и интеллектуальных ресурсов.

И дополню: больше всего страдает сам вумник. Ведь время и силы, затраченное на "достижение совершенства"  берутся из проекта/задачи, связь с которой знаток быстро теряет. А приобретенные обширные познания этого отнюдь не компенсируют.
Какая чушь. Улыбающийся
То что вы не можете разобраться с элементарными вещами типа итераторов и на это у вас уходит огромное количество времени и "интеллектуальных" ресурсов, не говорит о том, что у всех такие же проблемы.
Большинство людей изучающих C++ разбираются с итераторами (что это такое, для чего нужны и как их использовать) еще на этапе изучения, а дальше просто используют их в своей работе. Им не нужно всякий раз, когда они видят итераторы в чужом коде, лезть в справочники или на хабр, что бы понять что хотел выразить автор кода. Улыбающийся
Так же происходит и с другими возможностями C++. Перегрузки интеллектуальных ресурсов это не вызывает... ну у большинства разработчиков... Улыбающийся
Сколько вы потратили времени и  "интеллектуальных" ресурсов на разбирательство с declval? Улыбающийся
Записан
AkonResumed
Чайник
*
Offline Offline

Сообщений: 81


Просмотр профиля
« Ответ #13 : Апрель 15, 2021, 12:08 »

Под "high-end" я подразумевал мастерство разработчика, из которого автоматом вытекают гибкость и производительность (скорость выполнения кода). Если не вытекают - это антимастерство.

Насчет растраты интеллектуальных ресурсов - как уже сказал, это зависит от сегмента, в котором вы находитесь (т.е. от требований конкретного проекта).
Записан
Racheengel
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2679


Я работал с дискетам 5.25 :(


Просмотр профиля
« Ответ #14 : Апрель 15, 2021, 12:38 »

Под "high-end" я подразумевал мастерство разработчика, из которого автоматом вытекают гибкость и производительность (скорость выполнения кода). Если не вытекают - это антимастерство.

Да, конечно.
Но кроме этого, есть ещё аспекты сопровождаемости кода (как людьми - онбоардинг и расширяемость, так и техническими средствами - например, время компиляции).
И, честно говоря, "современные шаблоны" как-то не совсем входят в этот high-end, а скорее в вот тот другой, который дорого поддерживать.
ИМХО один из лучших принципов разработки, которого придерживаются мастера - это пресловутый KISS.
Как правило, именно он даёт в итоге максимум гибкости, производительности и стабильности.

Записан

What is the 11 in the C++11? It’s the number of feet they glued to C++ trying to obtain a better octopus.

COVID не волк, в лес не уйдёт
Страниц: [1] 2 3 4   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.051 секунд. Запросов: 23.