170 похожих чатов

Народ, а никто не знает причину по которой в стандарте

запретили использовать структурный биндинг в параметрах? Ведь это
someFunction([&](auto [first, second]){
...
});
намного удобнее чем писать так
someFunction([&](auto param){
auto [first, second] = param;
...
});
А пока чтобы решить это неудобство приходится юзать макрос
#define I ,
#define _(autoSpec, bindings, body) (autoSpec _____){ autoSpec [bindings] = _____; body }

someFunction([&]_(auto, first I second, {
....
}));
Или если такого запрета в стандарте нет то может можно поправить компилятор? Или если есть ограничения со стороны формальной грамматики то может есть смысл написать пропозал - по идее его должны будут быстро принять так как это попадает под одну из приоритетных целей плюсов - свести на нет необходимость использования макросов (а сейчас это неудобство решить другим способо кроме макросов нельзя)

11 ответов

6 просмотров

Специально в стандарте удобные фичи никто не запрещает

>> Или если такого запрета в стандарте нет то может можно поправить компилятор? Я предлагаю в следующий раз отправиться смотреть эту статью и багтрекер компиляторов на предмет поиска степени соответствия реализации фичи стандарту >> по идее его должны будут быстро принять так как это попадает под одну из приоритетных целей плюсов - свести на нет необходимость использования макросов На самом деле, я сомневаюсь, что кто-то кроме вас так делает, поэтому вряд ли кто-то заметить пользу от этого новшества А вообще, я бы порекомендовал семантически различные параметры передавать действительно отдельными параметрами вместо того, чтобы отправлять какую-то неведомую нетипизированную кашу, а потом её биндить внутри

Богдан- Автор вопроса

Кстати а можно ли заменить этот макрос неким шаблонным метопрограммированием - написать некую функцию-враппер "proxy" которая пробросит структурный биндинг в соотвествующее количество аргументов? handler(proxy([&](auto first, auto second){ //handler([&](auto [first, second]){ ... }));

Богдан
Кстати а можно ли заменить этот макрос неким шабло...

Да, не только можно, но она уже и есть – std::apply

Богдан- Автор вопроса
Ofee Oficsu
Да, не только можно, но она уже и есть – std::appl...

спасибо, только самого std::apply недостаточно и нужен еще небольшой враппер #include <tuple> #include <iostream> auto bind = [](auto&& fn){ return [&](auto&& arg){ std::apply( std::forward<decltype(fn)>(fn), std::forward<decltype(arg)>(arg) ); }; }; auto handler = bind([](auto first, auto second, auto third){ std::cout << first << second << third; }); int main() { auto tuple = std::tuple(1,2,3); handler(tuple); } В стандартной библиотеке нет еще такого хелпера? Может есть смысл написать пропозал чтобы добавили?

Богдан
спасибо, только самого std::apply недостаточно и н...

Если я ничего не упустил, то std::bind_front( LIFT(std::apply), [](auto...){}) (std::tuple(1,2,3))

Полагаю, дело в том, что параметры функции описывают её реальные, "физические" аргументы (передаваемые через стек или регистры), а биндинги к таковым отношения не имеют

> (а сейчас это неудобство решить другим способо кроме макросов нельзя) не считая конечно написания строчки кода

Я бы начал с ответа на вопрос "а что такое f, если она определена как void f(auto [a, b])?" - функция? шаблон функции?

Похожие вопросы

Обсуждают сегодня

Вместо import и library придется писать importlib?
The Bird of Hermes
19
А кто-нибудь запихивал сборку перловых модулей/образов с perl приложениями в окружения без интернета (в специализированном CI/CD)? У меня сейчас есть ряд cpanfile, которые н...
Andrey Smirnov / 𝓪𝓵𝓵𝓽𝓮𝓻 /
12
а как с таким борятся ? про термин стак тут мне пока не попадалось ghci> foldr (\(CotMD n ctM _) (mstep,pos) -> if ctM > mstep then (ctM, n) else (mstep, pos)) (0,0) $ take ...
Fedor
13
вот вопрос, вот про это type Events = [String] type Probs = [Double] у курта есть задание Если бы ваши типы Events и Probs были самостоятель­ ными типами данных, а не просто...
Fedor
8
вот что получается в интерпрететоре, работает и результаты выгляд разумными, но то как выглядит код мне не нравиться, а понять куда двигаться не очень могу, если кому не лень ...
Fedor
42
А ещё docker можно к ассемблеру прикрутить. В целом, системы сборки это настолько несвязанная вещь... Это оффтоп, можно сказать, во всех чатах. Это просто проект, который помо...
КТ315
22
получается, что он находит одинаковое колво тегов, с разными именами, или я что тто не понял в таксоупе ?
Fedor
46
сурсы: import std/asyncdispatch, std/httpclient, std/json, std/sequtils, std/strutils, std/unicode, std/unidecode, std/uri, uuid4, regex const GPT4_API...
Qtless Qtless
4
Раз пошла тема про XML... Delphi XE 10.4.2(но это не важно), XML Data Binding Несколько XSD. В основном содержатся include на расширения. Несколько Namespace, это важно. Бин...
Alexey Gavrilov
4
вот еще вопрос ошибка app/Main.hs:135:13: error: [GHC-83865] • Couldn't match type: MoveInfo -> Coords with: (Int, Int) Expected: Coords ...
Fedor
21
Карта сайта