@ProCxx

Страница 2390 из 2477
Аттрибутивно-ассоциативный ряд
29.09.2018
20:36:50
куда комитет смотрит!!111

мне нужна коллекция callbable move-only объектов

Yarique
29.09.2018
20:37:48
auto op = std::bind(&wrapper::operator(), std::move(std::make_unique<wrapper>()));

Google
Аттрибутивно-ассоциативный ряд
29.09.2018
20:38:27
1. а если без кучи? 2. в function не влезет

Yarique
29.09.2018
20:39:59
Аттрибутивно-ассоциативный ряд
29.09.2018
20:40:03
https://wandbox.org/permlink/zVH4fggFyM1t1VvE function не поддерживает биндинг move-only типов

зачем тебе в std::function ?
чтобы можно было хранить std::vector<std:function<bool()>>

Yarique
29.09.2018
20:40:54
Аттрибутивно-ассоциативный ряд
29.09.2018
20:41:24
как через any? а вызывать как?

коллекция динамическая

Yarique
29.09.2018
20:43:22
со std:any да, я не прав

коллекция динамическая
std::function<bool()> op = std::bind(&wrapper::operator(), std::move(std::make_shared<wrapper>())); тогда

Аттрибутивно-ассоциативный ряд
29.09.2018
20:45:01
собсна да. но это пиздец.

Yarique
29.09.2018
20:45:19
и получается будет операция копироваться, дёргая атомарный счётчик std::shared_ptr

Аттрибутивно-ассоциативный ряд
29.09.2018
20:45:35
щас бы в с++2z некопируемые типы через шаред гонять

Yarique
29.09.2018
20:45:35
но сам врапер не будет копироваться

Google
Yarique
29.09.2018
20:46:07
щас бы в с++2z некопируемые типы через шаред гонять
ну тогда только статические коллекции на шаблончиках писать

Аттрибутивно-ассоциативный ряд
29.09.2018
20:46:34
почему бы не сделать нормальную поддержку мув-семантики для бинд?

если он все равно хранит объект

Yarique
29.09.2018
20:46:47
щас бы std::function использовать в c++2z

он из C++03

Аттрибутивно-ассоциативный ряд
29.09.2018
20:47:31
что тогда не легаси?

что на замену бинду?

Yarique
29.09.2018
20:47:41
лямбды

Аттрибутивно-ассоциативный ряд
29.09.2018
20:48:19
как хранить лямбды в коллекции?

Yarique
29.09.2018
20:49:05
пиши шаблончики

либо

std::function<bool()> op = std::bind(&wrapper::operator(), std::move(std::make_shared<wrapper>())); тогда

Аттрибутивно-ассоциативный ряд
29.09.2018
20:50:11
проще свой бинд\function написать

но отстутсвие таких вещей в стандарте это печалька

я не верю что никому никогда не нужно было такое

Yarique
29.09.2018
20:51:10
проще свой бинд\function написать
а это не значит "пиши шаблончики" ?

Аттрибутивно-ассоциативный ряд
29.09.2018
20:51:31
а это не значит "пиши шаблончики" ?
да, именно так. кругом шаблончики

Yarique
29.09.2018
20:52:35
так это же прекрассно, что они есть ?

Google
Max
29.09.2018
20:54:50
и получается будет операция копироваться, дёргая атомарный счётчик std::shared_ptr
он дёрнет только один раз, при создании. Если тебя устраивают накладные расходы на каждый вызов std::function, то полагаю и с одной атомарной операцией жить можно.

Аттрибутивно-ассоциативный ряд
29.09.2018
20:57:40
он дёрнет только один раз, при создании. Если тебя устраивают накладные расходы на каждый вызов std::function, то полагаю и с одной атомарной операцией жить можно.
проблема не в перформансе а в натягивании совы на глобус. Есть ли причина по которой function не хочет мувать объекты?

Max
29.09.2018
21:01:32
проблема не в перформансе а в натягивании совы на глобус. Есть ли причина по которой function не хочет мувать объекты?
ну я тоже не вижу причин. move — это может и не то что нужно, а вот почему не forward — это вопрос.

хотя не, я туплю.

выяснили же, что бинд походу так и делает.

надо просто сигнатуру понять теперь ))

Аттрибутивно-ассоциативный ряд
29.09.2018
21:05:12
я тут гляжу в <function>. есть два метода https://pastebin.com/UtVD5yP5

вот у меня вызывается первый который принимает ссылку. хотя там есть второй который принимает &&

но как его вызвать непонятно

Yarique
29.09.2018
21:29:43
но как его вызвать непонятно
он для перемещаемых типов ?

Аттрибутивно-ассоциативный ряд
29.09.2018
21:30:06
но снаружи его не достать

Yarique
29.09.2018
21:30:12
https://pastebin.com/pnRdH2V3

Yarique
29.09.2018
21:30:23
для твоей задачи никак ?

Александр
29.09.2018
21:30:59
проблема не в перформансе а в натягивании совы на глобус. Есть ли причина по которой function не хочет мувать объекты?
Да, такая проблема с function есть, так как она хранит type erasure объекты. Её конструктор копирования не может знать, внутри копируемый тип или нет. Поэтому класс для копируемых и некопируемых функций должен быть разным. Это можно сделать через какой-нибудь шаблонный аргумент bool is_move_only или через отдельный класс. В любом случае, это не в std. Вот кто-то реализовал unique_function: https://github.com/Naios/function2/blob/master/Readme.md

Аттрибутивно-ассоциативный ряд
29.09.2018
21:31:23
я кажется баг нашел в structure binding

https://wandbox.org/permlink/lup0brjDThNUqlRP

или я чего то не понимаю

Yarique
29.09.2018
21:33:05
почему это баг? ты по значению всегда возвращаешь же

Аттрибутивно-ассоциативный ряд
29.09.2018
21:34:27
потому что если явно достать фьючерс из тупла то все работает

https://cppinsights.io/lnk?code=Ly8gVGhpcyBmaWxlIGlzIGEgIkhlbGxvLCB3b3JsZCEiIGluIEMrKyBsYW5ndWFnZSBieSBHQ0MgZm9yIHdhbmRib3guCiNpbmNsdWRlIDxpb3N0cmVhbT4KI2luY2x1ZGUgPGZ1dHVyZT4KI2luY2x1ZGUgPGZ1bmN0aW9uYWw+CiNpbmNsdWRlIDx0dXBsZT4KCmF1dG8gZm9vKCkgewogICAgcmV0dXJuIHN0ZDo6bWFrZV90dXBsZSg1LCBzdGQ6OmZ1dHVyZTxpbnQ+e30pOwp9CgphdXRvIGJvbygpIHsKICAgIC8vKgogICAgYXV0byBbaSwgZl0gPSBmb28oKTsKICAgIC8qLwogICAgYXV0byBmID0gc3RkOjptb3ZlKHN0ZDo6Z2V0PDE+KGZvbygpKSk7CiAgICAvLyovCiAgICByZXR1cm4gc3RkOjptb3ZlKGYpOwp9CgoKaW50IG1haW4oKQp7CiAgICByZXR1cm4gMDsKfQ==&rev=1.0

Google
Yarique
29.09.2018
21:35:11
https://pastebin.com/G5ZmNBxt

Аттрибутивно-ассоциативный ряд
29.09.2018
21:35:49
разве по дефолту должно биндиться на ссылках?

Admin
ERROR: S client not available

Yarique
29.09.2018
21:36:14
https://pastebin.com/DY1RgwuK

Аттрибутивно-ассоциативный ряд
29.09.2018
21:37:01
тогда почему там ссылки?

Yarique
29.09.2018
21:37:15
но есть ещё и copy elision

Александр
29.09.2018
21:38:02
Всё, больше про function разговора не будет? :(

Аттрибутивно-ассоциативный ряд
29.09.2018
21:38:18
но есть ещё и copy elision
посмотри пожалуйста длинную ссылку

гсс биндит по ссылкам

что не позволяет сделать copy elision

я думал auto [x,y] = tuple(…) копирует элементы из тупла. а оно референсит. буду знать

Yarique
29.09.2018
21:42:43
если forward сделал каст в rvalue, значит правильно работает binding https://pastebin.com/CFvVXxRb

Александр
29.09.2018
21:43:01
продолжай
Так я написал выше пост, объясняющий причины неработающей std::function с мув-онли типами

Александр
29.09.2018
21:46:42
Оно знает в меру. Наличие конструктора копирования должно определяться классом, который увы не может знать, что в него засунут. Ему только сигнатура известна

Аттрибутивно-ассоциативный ряд
29.09.2018
21:48:20
но он может взять чтото по && и притвориться что это move-only

я бы попробовал попатчить function но мне страшно

Google
Александр
29.09.2018
21:49:17
Там те же проблемы и с const/volatile/noexcept же

Type erasure кушает всё, оставляя лишь сигнатуру. При этом все qualifierы забываются. Почему? Косяк стандарта, думаю

Аттрибутивно-ассоциативный ряд
29.09.2018
21:53:17
подожди, но причем тут type erasure?

если function умеет только копировать функтор

почему бы не смувить его в назначеное место?

я правда не совсем понимаю как type erasure работает

вот есть function::operator(Fp&&). казалось бы вот оно. а внутри function(_VSTD::forward<_Fp>(__f)).swap(*this);

а все от отсутсвия function(F&&)

Александр
30.09.2018
07:19:29
если function умеет только копировать функтор
Умеет и должен уметь. А если ты не в него засунешь некопируемый функтор, как он будет копироваться?

Аттрибутивно-ассоциативный ряд
30.09.2018
09:28:15
Умеет и должен уметь. А если ты не в него засунешь некопируемый функтор, как он будет копироваться?
Значит не будет копироваться. Будет мув-онли. Другим это не мешает

Dmitry
30.09.2018
09:30:34
Если только свою написать и параметром передать что генерировать copy/move/none. Иначе вынуждена всё генерировать, далее если никогда не будет копироваться или перемещаться.

Аттрибутивно-ассоциативный ряд
30.09.2018
09:33:12
Я понимаю, что там большой объем работы. Но может никто пока не лез туда просто?

Страница 2390 из 2477