Max
Ок, здесь не виртуальный, все равно работает. https://ideone.com/kso4FK
Max
dynamic_cast выкинет ошибку, если ты решишь кастовать вверх по иерархии, а не вниз.
Anatoly
Ок, здесь не виртуальный, все равно работает. https://ideone.com/kso4FK
смотри какая прелесть: https://wandbox.org/permlink/wMNTKYDEZrI2M0Mj
Max
static_cast схавает как миленький, и потом у тебя будут бессонные ночи в глубокой отладке.
Anatoly
Derived приведен к Derived2 без какого-либо контроля
Anatoly
поэтому downcast только через dynamic_pointer_cast
Igor
Не морда, а кэш.
ну то есть по сути, просто упрощает доступ обычным юзверям к конанской репе? https://jfrog.com/open-source/ кстати, в табличке сравнений с PRO не указан конан для коммьюнити версии, это так и надо?) https://i.imgur.com/orrLVjA.png
Алексей
поэтому downcast только через dynamic_pointer_cast
Это слишком сильное утверждение. Можно и через static, если есть гарантия того, что пришел указатель именно на тот Derived, в который собираемся кастить.
Oleg
блин, не успел дочитать вакансию
Anatoly
читайте правила, вакансии @AlexFails
Alexander "SonnySlave"
@JBaruch кого-нибудь посадили делать пакеты 24/7?
Alexander "SonnySlave"
тому что такими темпами vcpkg шустрее кроссплатформенным станет, чем в конане появится достаточное кол-во пакетов для жизни 😊
Alexander "SonnySlave"
да наймите кого-нибудь из бинкрафтеров уже 😊
Alexander "SonnySlave"
Uilian Reis предлагали?)
Nikita
ребята а зачем initializer_list задизайнили так, что из него нельзя мувнуть значения?
Oleg
ну, его собираются передизайнить ,как я понял
Nikita
А есть ссылочка на источник?
Oleg
На конференции что-то говорили
Никита
котаны, а кому бесплатный Artifactory для Конана? http://blog.conan.io/2018/03/27/Announcing-JFrog-Artifactory-Community-Edition-C-C++.html
А не подскажете, этот Artifactory я могу развернуть локально и использовать как полноценный сервер для хранения пакетов? Мне тут предстоит в своей команде презентовать и защитить конан перед другими пакетными менеджерами. Я знаю, что я точно могу использовать conan_server для этого, но по слухам, он не очень производительный, боюсь что заглохнет у нас на CI.
Anatoly
ребята а зачем initializer_list задизайнили так, что из него нельзя мувнуть значения?
если класс поддерживает move из const объекта, то почему нет?
Nikita
ну максимум это примитивы
Nikita
неинтересненько
Anatoly
ну максимум это примитивы
struct movable { int d; explicit movable(int d) : d(d) {} movable(movable&& r) : d(std::move(r.d)){} movable(movable const && r) : d(std::move(r.d)){} movable& operator=(movable&& r) = delete; movable(movable const&) = delete; movable& operator=(movable const&) = delete; ~movable(){std::cout << "deleted";} };
Никита
Он для этого и существует
Ок, спасибо) Меня просто смутили сообщения про веб-морду
Anatoliy
достаточно удалить только один из пары constructor/assignment operator вроде бы
JBáruch
Anatoliy
второй неявно будет = delete;
Nikita
это просто обёртка над примитивом
Anatoly
это просто обёртка над примитивом
я согласен, что здесь что-то недоработано
Anatoly
есть такой proposal http://open-std.org/jtc1/sc22/wg21/docs/papers/2014/n4166.pdf
Nikita
блин ладно бы initializer_list добавили до с++11
Nikita
но зная о мув семантике делать вот так вот
Nikita
😒
Anatoly
блин ладно бы initializer_list добавили до с++11
ну, вообщем, пока что я могу посоветовать, если знаешь, что делаешь снимай const const_cast-ом и перемещай
Nikita
на самом деле мне некритичен этот момент, просто я хотел узнать именно причины такого дизайна
Nikita
может быть просто я от незнания возмущаюсь)
Cuno
Почему std::function требует CopyConstructible?
Cuno
От оборачиваемого вызываемого объекта
Cuno
"Всегда так было" это всё-таки не ответ на "почему".
Cuno
Но функтор можно мувнуть вместо копирования
Cuno
Есть принципиальные причины этого не делать?
Александр
Cuno
auto value = std::make_unique<int>(42); auto lambda = [ v = std::move(value) ] () {}; std::function<void()> fn { std::move(lambda) }; Мне хотелось бы чтобы такое работало.
Александр
подозреваю, что дело в нём
Cuno
Ага. Лишняя аллокация. Именно поэтому и хотелось бы, чтобы именно этот код работал.
Nikita
На самом деле реализовать std function для мув онли типов достаточно просто
Nikita
Если без оптимизаций
Aidar
Почему std::function требует CopyConstructible?
Потомучто сам функшг копи констрактабл
Nikita
Вообще само понятие скопировать функцию бредово звучит
Cuno
Потомучто сам функшг копи констрактабл
Это скорее похоже на следствие
Aidar
Cuno
Ну сдизайни лучше чо
"Сперва добейся". Аргументы пошли.
Nikita
Функтор
В данном контексте неважно : Функтор представляет собой некоторую операцию над входными данными и что значит скопировать операцию это не очень понятно
Cuno
Меня сложно обидеть.
Aidar
"Сперва добейся". Аргументы пошли.
Ну я не понимаю как ты это делать собрался, эксепшны кидать в рантайме? Говно какоетт
Aidar
Ты же понимаешь что внутри там динамический полиморфизм или другой метод хранения разнородных типов
Aidar
Ты же понимаешь что там разнородные типы не так ли?
Cuno
Ты же понимаешь что внутри там динамический полиморфизм или другой метод хранения разнородных типов
Вот, это уже хороший аргумент. type erasure стирает информацию о том, что тип move-only.
Aidar
Да тип так или иначе известен внутри но
Aidar
Что делать при копировании вопрос
Aidar
Если он не умеет в копирование
Cuno
Хм, действительно. Т.е. для move-only std::function надо бы отдельный класс писать.
Aidar
Я согласен что нужен unique_function в стандарте конечно
Alexander
folly::Function наверное хороший пример move-only аналога std::function
Alexander "SonnySlave"
😊
Konstantin
ну так одно дело теоретики, оторванные от реальности, и совсем другое дело те, кто на практике использует С++
Anatoly
брейк
Anatoliy
извиняюсь
Konstantin
которые пишут - ок. речь шла про теоретиков, то есть тех кто давно не пишет, а только рассуждает, пишет блоги, консультирует и прочее.