boost ranges или open-coded loop скопировать в другой контейнер не объекты целеком, а конкретный мембер объекта, для всех объектов? как-то back_inserter с mem_fn не дружится у меня
эмм, std::transform?
std::transform + [] (Widget a) { return a.b; } — первое, что приходит на ум
Лямбду можно заменить на mem_fn(&Widget::b). Мне кажется что где-то мне хватало и просто Widget::b без mem_fn, но не соображу при каких условиях.
спасибо, не знал
Везде, где invoke под капотом, так как std::invoke(&Widget::b, widget) == widget.b
Ну, &Widget::b это Callable, который принимает первым и единственным аргументом Widget, в каких то таких ситуациях и прокатывает
Да, точно. Тогда выяснилось что в нашей кодовой базе это не работало потому что не было реализации invoke.
Чо нет, это pointer to data member
то, что его можно вызвать через invoke, не значит, что это callable...
https://godbolt.org/z/56MnEnYrs но ведь invocable, да?
> A Callable type is a type for which the INVOKE operation is applicable
A callable type is a function object type or a pointer to member. https://eel.is/c++draft/func.def#3
Ну pointer на data member сюда входит
но обратное не обязательно верно
Обсуждают сегодня