Max
Ок, здесь не виртуальный, все равно работает.
https://ideone.com/kso4FK
JBáruch
Max
dynamic_cast выкинет ошибку, если ты решишь кастовать вверх по иерархии, а не вниз.
Anatoly
Max
static_cast схавает как миленький, и потом у тебя будут бессонные ночи в глубокой отладке.
Anatoly
Derived приведен к Derived2 без какого-либо контроля
Anatoly
поэтому downcast только через dynamic_pointer_cast
Igor
Не морда, а кэш.
ну то есть по сути, просто упрощает доступ обычным юзверям к конанской репе?
https://jfrog.com/open-source/ кстати, в табличке сравнений с PRO не указан конан для коммьюнити версии, это так и надо?) https://i.imgur.com/orrLVjA.png
Oleg
блин, не успел дочитать вакансию
Anatoly
читайте правила, вакансии @AlexFails
Alexander "SonnySlave"
@JBaruch кого-нибудь посадили делать пакеты 24/7?
Alexander "SonnySlave"
тому что такими темпами vcpkg шустрее кроссплатформенным станет, чем в конане появится достаточное кол-во пакетов для жизни 😊
JBáruch
JBáruch
Alexander "SonnySlave"
да наймите кого-нибудь из бинкрафтеров уже 😊
Alexander "SonnySlave"
Uilian Reis предлагали?)
Nikita
ребята а зачем initializer_list задизайнили так, что из него нельзя мувнуть значения?
Oleg
ну, его собираются передизайнить ,как я понял
Nikita
А есть ссылочка на источник?
Oleg
На конференции что-то говорили
JBáruch
Anatoly
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
Nikita
это просто обёртка над примитивом
Anatoly
есть такой proposal http://open-std.org/jtc1/sc22/wg21/docs/papers/2014/n4166.pdf
Nikita
блин ладно бы initializer_list добавили до с++11
Nikita
но зная о мув семантике делать вот так вот
Nikita
😒
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
Nikita
Вообще само понятие скопировать функцию бредово звучит
Aidar
Aidar
Cuno
Aidar
Nikita
Функтор
В данном контексте неважно : Функтор представляет собой некоторую операцию над входными данными и что значит скопировать операцию это не очень понятно
Cuno
Меня сложно обидеть.
Aidar
Ты же понимаешь что внутри там динамический полиморфизм или другой метод хранения разнородных типов
Aidar
Ты же понимаешь что там разнородные типы не так ли?
Cuno
Aidar
Да тип так или иначе известен внутри но
Aidar
Что делать при копировании вопрос
Aidar
Если он не умеет в копирование
Cuno
Хм, действительно. Т.е. для move-only std::function надо бы отдельный класс писать.
Aidar
Я согласен что нужен unique_function в стандарте конечно
Aidar
Aidar
Alexander
folly::Function наверное хороший пример move-only аналога std::function
Aidar
Alexander "SonnySlave"
😊
Konstantin
ну так одно дело теоретики, оторванные от реальности, и совсем другое дело те, кто на практике использует С++
Anatoly
брейк
Anatoliy
извиняюсь
Alexander "SonnySlave"
Konstantin
которые пишут - ок. речь шла про теоретиков, то есть тех кто давно не пишет, а только рассуждает, пишет блоги, консультирует и прочее.