Задать вопрос
  • Почему адаптеры из range функторы?

    maaGames
    @maaGames
    Dyikot,
    А вообще, функция разве может быть типом? Кажется, не может: int Func1() и int Func2() - один и тот же тип. А вышеназванный _Filter_fn используется как тип в шаблоне.
    template <class _Pr>
                requires constructible_from<decay_t<_Pr>, _Pr>
            _NODISCARD constexpr auto operator()(_Pr&& _Pred) const
                noexcept(is_nothrow_constructible_v<decay_t<_Pr>, _Pr>) {
                return _Range_closure<_Filter_fn, decay_t<_Pr>>{_STD forward<_Pr>(_Pred)};
            }
    Написано
  • Почему адаптеры из range функторы?

    maaGames
    @maaGames
    Dyikot, Да, я вас неправильно понял. Ещё не изучал 20-23 стандарт, поэтому не понял вопрос.
    Глянул про их, конкретно на ваш вопрос ответ ещё проще: адаптеры можно объединять через | и делать составной. То есть не делать функию обёртку, вызывающую несколько функций, а в вызове написать A|B|C.
    Но и всё вышесказанное мной про функторы не отменяется, если какое-то особо извращённое поведение объекта range_adaptor_closure понадобится, можно в функторе что-то хранить и возвращать наружу.

    https://en.cppreference.com/w/cpp/named_req/RangeA...
    Написано
  • Почему адаптеры из range функторы?

    maaGames
    @maaGames
    Dyikot, Хранятся в другом объекте и передаются как? Через какой-то внешний объект, глобальную переменную, синглтон? В алгоритмы передаётся контейнер и функтор. Как вы в функтор передадите "другой view-объект", если у вас фукнция, а не функтор? Лямбды не считаются, это опять же функтор со своим состоянием, а не обычня функция.
    А я пишу не про данные контейнера, а про данные функтора. Который как бы stateless, но если очень надо, то он может быть очень даже stateyes.
    Давай, чтобы точно говорить об одном и том же. Вызывается ranges::sort и надо посчитать, сколько перестановок делается (допустим, что это зачем-то надо). И этих ranges::sort одновременно вызывается в куче потоков больше одной штуки. Как вы это сделаете, передавая фукнцию сравнения, а не объект с состоянием? А очень просто! Нужно завести глобальный map, связывающий указатель на контейнер со счётчиком и в функции сравнения брать нужный счётчик... А указателя на контейнер нет в функции сравнения... Упс...
    Написано
  • Почему адаптеры из range функторы?

    maaGames
    @maaGames
    Dyikot, Да, в правы, функтор передаётся по значению. Но это не мешает передавать дополнительные данные вместе с функтором, чтобы они использовались алгритмами. Например, для сравнения вещественных чисел можно передавать точность сравнения. И не через глобальную переменную, а для каждого отдельного контейнера свою (привет от многопоточной обработки контейнеров с разными величинами погрешнсоти сравнения).
    stateless тоже легко обходится, если состояние функтора хранить в shared_ptr, тогда можно дополнительную информацию наружу возвращать. Но придётся переписать move-конструктор, чтобы он не попортил указатели.
    Написано
  • Как починить откладчик visuaul studio?

    maaGames
    @maaGames
    Не знаю WPF, но знаю английский. Проверь код, держа в памяти то, что отсчёт индексов массива начинается с 0, а не с 1.
    Написано
  • Как синхронизировать процессы используя только std?

    maaGames
    @maaGames Автор вопроса
    res2001, Совершенно верно. но тут мы уже подключаем или сокеты или ещё какие-то стредства непосредственного обмена собщениями между тремя процессами. С тем же успехом можно и между двумя процессами сообщения передавать синхронизирующие. Интересовало именно простейшая синхрлнизация между процессами, как это возможно для потоков именно средствами std, без сторонних (или самописных) библиотек.
    Написано
  • Как синхронизировать процессы используя только std?

    maaGames
    @maaGames Автор вопроса
    Mercury13, Есть же куча библиотек, дающих кросплатформенное решения, абсрагируя от API конкретной ОС. В том же Qt есть QSahredMemory и QSystemSemaprore. Не знаю, QProcess через signal\slot синхронно или асинхроно работает. Всяких сторонних библиотек куча. Интересно было именно есть ли подобный функционал в std. Раз уж они взялись за многопоточность, может и для многопроцессорности что-то делают.
    Написано
  • Как синхронизировать процессы используя только std?

    maaGames
    @maaGames Автор вопроса
    Mercury13, через строковый буфер ничем не поможет. один поток пишет int=11, второй int=22 и в консоли может оказаться "1212" хоть через буфер, хоть не через буфер. Так что или этот osyncstream или какие-нибудь мьютексы. Но про ввод в консоль это просто для примера.

    Допустим, другой жизненный пример. Надо запретить запуск двух экзепляров приложения. Без WinAPI я не могу этого сделать "красиво". То есть можно файл в temp создавать и удалять при закрытии, но это костыли.
    Написано
  • Как синхронизировать процессы используя только std?

    maaGames
    @maaGames Автор вопроса
    Mercury13, в описании написано про синхронизацию потоков, а не процессов. Но и для синхронизации потоков полезный класс, спасибо.
    Написано
  • Как синхронизировать процессы используя только std?

    maaGames
    @maaGames Автор вопроса
    Mercury13, если бы оно было в стандарте и я бы об этом знал, то стал бы я спрашивать, есть ли такое в стандарте?

    Но вот костыль через файл сработает, наверное. Создать пустой файл и открыать его на запись. Тогда второй процесс будет ждать, пока можно будет открыть на запись. Понятно, что можно ещё вебсокеты притянуть или ещё какие-то странные способы. Но мне стало интересно, может в современном С++23(26) уже что-то такое добавили. Особо не слежу за обновлениями.
    Написано
  • Как синхронизировать процессы используя только std?

    maaGames
    @maaGames Автор вопроса
    например, когда два приложения пишут в один файл или в одну консоль. Знаю, что это звучит дикой архитектурой, но, если два приложения делают одну большую задачу, то мне удобно писать логи в один файл (одну консоль), а не в два. Можно писать в отдельные файлы с меткой времени, а потом два файла объединить в один, но хочется-то сразу. Межпроцессорным мьютексом синхронизировать запись.
    Написано
  • Как синхронизировать процессы используя только std?

    maaGames
    @maaGames Автор вопроса
    res2001, не встречал упоминаний, что std::atomic и std::barrier подерживают процессы. Везде тлько про потоки.
    Да и разделяемая память это уже API ОС, а не std\C++, а если всё-равно системное что-то испоьзовать, то как бы и изначально есть более удобные решения. Интересновало именно стандартное кроссплатформенное решение, а его нету. Раз нету, будем дальше использовать сторонние библиотеки.
    Написано
  • Как синхронизировать процессы используя только std?

    maaGames
    @maaGames Автор вопроса
    rPman, Я не очень в курсе. Под андроид только игрушки делал и уровень знаний Java минимален.
    Написано
  • Как синхронизировать процессы используя только std?

    maaGames
    @maaGames Автор вопроса
    rPman, а что там, если не java? GUI свой, но язык-то Java.
    Написано
  • Как синхронизировать процессы используя только std?

    maaGames
    @maaGames Автор вопроса
    rPman, а при чём тут Майкрософт? Не большой знаток Линуксов, там поток и процесс равнозначны в плане работы std::mutex?

    Вот GUI в std крайне маловероятно что когда-то появится. Из boost кое-что тянут в std, но boost то открытый и бесплатный, а вот какой-нибудь Qt бесплатно никто не отдаст. А на что-то, кроме Qt-GUI, сообщество всё-равно не согласится :)

    Если хочется кроссплатформенный байткод, то берём Java и пилим что хотим. Там и GUI свой инструментарий кроссплатформенный. Красота.
    Написано
  • Как синхронизировать процессы используя только std?

    maaGames
    @maaGames Автор вопроса
    rPman, В общем, только сторонние библиотеки и ждём какой-нибудь С++35
    Написано
  • Как синхронизировать процессы используя только std?

    maaGames
    @maaGames Автор вопроса
    rPman, Да со сторними-то понятно. Чисто на Виндоус и WinAPI функций хватало. Просто столько всего в новые стандарты напихали, что мог недоглядеть. Значит и правда нет, а не я невнимательный.
    Написано
  • Как синхронизировать процессы используя только std?

    maaGames
    @maaGames Автор вопроса
    это всё для потоков в пределах одного процесса.
    Написано
  • Почему в c++ еще нету Null-Conditional Operator?

    maaGames
    @maaGames
    Dyikot, а если не один nullptr надо проверить, а два?
    Например: c.Parent()->Get()->Value();
    Опять не подходит? То есть целый оператор ради одной строго фиксированной конструкции вводить, которая легко заменяется макросом?
    Написано
  • Почему в c++ еще нету Null-Conditional Operator?

    maaGames
    @maaGames
    Dyikot, Но ведь стандарт С++ не только для тебя пишут. Допустим, вот такой код:
    auto cursor = c.Parent?.GetCursorOn() ?? c.Parent?.GetCursorOff();


    Или всё, это уже слишком сложно и не будем оператор ??? вводить?

    А мне вот хочется, чтобы в цикле for инкремент итератора был с условием. Сейчас для этого приходится while использовать, а хотелось бы в for как-нибудь по хитрому условие инкремента встроить. Чтобы отслеживало, перешло к следующей итерации автоматом или через continue. Предлагаю оператор о_0
    Написано