Tom
А в обратную сторону-то никак ;) template <std::size_t N> constexpr auto foo(int const (&xs)[N]) noexcept { // Вот тут мы уже не знаем, xs вообще constexpr или нет. И как теперь IntegralConstant возвращать? } Hana основана на факте, что все данные внутри типа содержатся. Но это не общий случай. Мы, может, xs в компайл тайм знаем, но в типе int ничего не прописано. Или я путаю чего?
Александр
Можно пример кода, который hana якобы не смогёт?
Александр
Пример задачи*
Tom
Можно пример кода, который hana якобы не смогёт?
Да в принципе любые преобразования с C-style массивами/std::array. Т.е. с последовательностями одного типа.
🐙 Antony
В принципе, если обмазать констэкспром, то мб сработает
Именно этим я и займусь, когда выпустят Ranges TS и примут в стандарт http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2015/p0031r0.html
Anonymous
down
Александр
Да в принципе любые преобразования с C-style массивами/std::array. Т.е. с последовательностями одного типа.
По-моему она только своими туплами оперирует. И они всяко лучше стандартных массивов
🐙 Antony
интересно было бы увидеть где такое нужно на практике (в голову не приходит ничего)
Reflections, Spirit, Metaparse (и другие DSL), string_view, span, std::array + бонусом получите более строгую гарантию, что компиляотр точно сможет соптимизировать подобнsе выражение
Tom
Именно этим я и займусь, когда выпустят Ranges TS и примут в стандарт http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2015/p0031r0.html
Мне просто в GSoC ментор предложил направление проекта сменить в сторону compile-time ranges. Вот интересуюсь, надо ли оно вообще кому-то. В пропозал твоем больше про iterators речь, а весь Ranges TS сейчас нисколько ни constexpr.
Александр
напомните онлайн ide'шку с бустом
Danil
Wandbox
Danil
Или как то так
Александр
точно, спасибо
Danil
Она с ВИМОМ И ЕМАКСОМ
Tom
https://wandbox.org/permlink/e6y9UbWZva7MZS6M
Тип данных разный. Т.е. переход с int на IntegralConstant вроде понятен. Но вот если есть user-defined тип, который кучу всего в constexpr умеет делать, ты мы в пролете.
Александр
Это верно... а не муторно ли?
Муторно :) Но я пока не встречался с типами, которые хорошо работают в compile-time, кроме фундаментальных и которым понадобились бы мощные алгоритмы
Tom
Муторно :) Но я пока не встречался с типами, которые хорошо работают в compile-time, кроме фундаментальных и которым понадобились бы мощные алгоритмы
Вот тот ответ, которого я ждал! Значит, не мне одному неочевидны use cases. Правда @antoshkka предложил пару мест. Только это такие библиотеки, что в source прям страшно лезть :D
Roman
Ребята, всем привет! Тем кто работает с Qt, да и в принципе многим будет интересна данная библитека: https://qbeon.github.io/QuickStreams/ Буду рад отзывам, спасибо за внимание!
🐙 Antony
Кстати, вот это может помочь: https://github.com/boostorg/algorithm/pull/35/files Там Mikhail Maksimov сделал огромное количество тестов на constexpr для Boost.Algorithm
Александр
Кстати, вот это может помочь: https://github.com/boostorg/algorithm/pull/35/files Там Mikhail Maksimov сделал огромное количество тестов на constexpr для Boost.Algorithm
Случайно увидел в коде следующую строку: BOOST_CXX14_CONSTEXPR T const& clamp ( const T& val, typename boost::mpl::identity<T>::type const & lo, typename boost::mpl::identity<T>::type const & hi ) Какой смысл от identity<T>::type?
Surreal
Нет, не чистит. template< typename X > struct identity { typedef X type; };
🐙 Antony
Избежать ambiguity и заставить брать тип T от первого параметра. Другими словами, без identity может не собраться код, или произойдут неожиданные преобразования первого аргумента наподобие int i = 3; i = clamp(i, -1.f, 10u)
Александр
круто!
Anonymous
Всем привет
Anonymous
Есть тут кто живой?
Anonymous
А, тут для нубовопросов отдельная конфа
Anonymous
Есть вопрос. С помощью какой либы на с++ можно загрузить изображения что бы с ним работать?(узнать его размер,поменять младшие байты и т.д.)
Anonymous
ну или ПРОСТО, как загрузить изображение для работы с ним. Какая библиотека нужна ?
Две Точки
+
Pepe 🐸
Там есть метод который позволяет это сделать и вообще заточена под работу с изображениями
ГуНиСе️
а вообще, тысячи их
ГуНиСе️
C++ Image Processing Libraries - Stack Overflow stackoverflow.com I am looking for a C++ library for image processing. I need the library to threshold a PPM photo (color photo). Should I write my own code? what do you guys think?
Stanislav
http://libtins.github.io/
Berkus
Годно выглядит
Andrei
openCV например
Крайне не советую.
Andrei
если формат известен — лучше загружать специфичную библиотеку. Больше шансов что без проблем заработает. Если надо сразу несколько форматов, то чем проще тем лучше. Монструозный опенсиви тянуть ради открытия двух картинок — не надо.
Anonymous
суть моей задачи такова: пройтись по всем пикселям изображения. Заменить в каждом канале(RGB) пиксель цвета на текст(на часть текса). LSB - еще называют
Anton
http://libtins.github.io/
Вот ещё. К тому же на стероидах (dpdk, pfring). Не пользовался правда. https://github.com/seladb/PcapPlusPlus
Stanislav
https://www.youtube.com/watch?v=zBkNBP00wJE
Igor
https://www.youtube.com/watch?v=zBkNBP00wJE
великолепная презентация) любо-дорого смотреть как оптимизатор схлопывает простыни кода в несколько инструкций
Stanislav
о да
Berkus
Было раза два по-моему
Stanislav
Боян, нет?
может быть :) ноя видимо прослоупочил все
Berkus
Ну хорошо хоть сейчас посмотрел, я этим видео терридевису доказывал что плюсы поэффективнее сей могут быть, тщетно конечно же
Александр
Подскажите, как запилить фичу, схожую с std::declval<> - запрет использования некоторых методов (шаблонных) везде, кроме unevaluated-context?
🐙 Antony
Можно попробовать использовать std::declval<int😠) первой строчкой в таком коде.
Александр
Можно попробовать использовать std::declval<int😠) первой строчкой в таком коде.
Не, ругается на использование. Не знаю, имеет ли это значение, но сама функция Foo не вызывается нигде, кроме decltype(SomeClass().Foo())
Surreal
Ситуация: есть моя функция - X(...) и есть асинхронная функция большой библиотеки - Y(...). Я хочу вызвать эту функцию и дождаться результата. У функции Y(...) есть колбек, сейчас я вызываю ее так: std::promise<bool> p; std::future<bool> f = p.get_future(); auto callback = [&p](...) { p.set_value(true); }; Y(...,callback); auto status = f.wait_for(std::chrono::seconds(10)); Собственно вопрос: безопасно ли это? Функция Y(...) выполняется внутри планировщика библиотеки.
🐙 Antony
Зависит от имплементации Y. Надо смотреть в документацию - если callback будет вызываться только один раз - тогда ОК
🐙 Antony
Если несколько раз - вылетит исключение, и может поломать что-то внутри библиотеки
Berkus
это про set_value на промисе два раза
Berkus
> An exception is thrown if there is no shared state or the shared state already stores a value or exception.
🐙 Antony
Surreal
Зависит от имплементации Y. Надо смотреть в документацию - если callback будет вызываться только один раз - тогда ОК
Один раз. Моя функция X тоже выполняется в планировщике библиотеки. Я не уверен, возможен ли вариант, что они обе в одном потоке выполнятся, но все же как себя эта конструкция в таком случае поведет? В гугле пока не могу найти инфы про set_value и wait в одном потоке.
Berkus
можешь вызов Y завернуть в асинк
🐙 Antony
Один раз. Моя функция X тоже выполняется в планировщике библиотеки. Я не уверен, возможен ли вариант, что они обе в одном потоке выполнятся, но все же как себя эта конструкция в таком случае поведет? В гугле пока не могу найти инфы про set_value и wait в одном потоке.
Может быть проблема, если планировщик библиотеки выполяет всё в один поток. Тогда есть шанс залипнуть на wait_for и не выполнить таску до истечения таймаута. Стоит смотреть в документацию библиотеки Y.
Surreal
можешь вызов Y завернуть в асинк
Так она все равно себя в планировщик засовывает.
Berkus
aleksey
Народ, подскажите в openGL есть возможность рисовать объемный прямоугольник задав его высоту, ширину и толщину(глубину)? Если да, то как?
Berkus
нарисовав все 6 его граней
aleksey
Этот вариант я знаю)). Но хотелось бы что-то типа Panel(h, w, t). Или это нужно самому реализовать?
Berkus
glQuads и делай сам