Здравствуйте, niXman, Вы писали: X>в идеале, хотелось бы чего-то типа
$$(int, std::string, double) result = $(33, "string", .14);
auto result2 = func();
int i = result%$0;
std::string s = result%$1;
double d = result%$2;
int sizet = size(result);
static_assert($sizeof(result) == $sizeof(func()), "bad size");
Здравствуйте, Evgeny.Panasyuk, Вы писали:
EP>P.S. А вообще меня и обычный синтаксис не напрягает. Тем более tuple не так часто нужны. EP>Например, если это тип возврата функции (тем более не лямбды) — то тут не трудно и обычную структуру объявить. Названия полей будут служить документацией, да и вызывающий код будет выглядеть понятней: res.some_meaningful_name vs res.first/get<0>(res). Тем более при наличии uniform initialization (а в C++98 — aggregate initialization) EP>Другое дело если результат это действительно набор безликих полей, либо типы полей результат CT-вычислений.
+1
Туплы длиной больше 3 неюзабельны, если это только не в сгенеренном коде, в который люди не смотрят (или не видят, в случае подкапотной обработки вариадиков и т.п.)
то, что кортежи стали частью стандарта — это замечательно, не спорю.
но декларация кортежей и доступ к их элементам — сводят на нет все плюсы кортежей %)
возможно, уже кто-то задавался аналогичным вопросом — нужна тулза, предоставляющая альтернативный синтаксис, и которую можно включить в pre-build степ.
в идеале, хотелось бы чего-то типа:
(int, std::string, double) result = (33, "string", .14);
auto func() -> (int, std::string, double) {}
auto result = func();
int i = result[0];
std::string s = result[1];
double d = result[2];
...
// как бонус, хотелось бы и чего-то типа:int size = result.size();
static_cast(sizeof(result) == sizeof(func()), "bad size");
спасибо.
пачка бумаги А4 стОит 2000 р, в ней 500 листов. получается, лист обычной бумаги стОит дороже имперского рубля =)
Здравствуйте, niXman, Вы писали:
X>возможно, уже кто-то задавался аналогичным вопросом — нужна тулза, предоставляющая альтернативный синтаксис, и которую можно включить в pre-build степ.
я пишу код только в ИДЕ, и по этому негативно отношусь к тулзам которые в пребилде генерят код.
ИДЕ о таких тулзах ничего не знает, выдает ошибки парсинга, а худшем случае это ломает автокомплит, аутлайн и т.п.
Здравствуйте, Abyx, Вы писали:
A>'= (a, b);' — это валидный С++ (operator,)
кстати да. нужно подумать в этом направлении...
A>негативно отношусь к тулзам которые в пребилде генерят код.
аналогично. но другого выхода я не вижу.
хз, есть ли в планах стандартизаторов, сделать нормальным использование кортежей, как в нормальных ЯП?...
A>ИДЕ о таких тулзах ничего не знает, выдает ошибки парсинга, а худшем случае это ломает автокомплит, аутлайн и т.п.
да, согласен, но другого выхода не вижу.
пачка бумаги А4 стОит 2000 р, в ней 500 листов. получается, лист обычной бумаги стОит дороже имперского рубля =)
Здравствуйте, Abyx, Вы писали:
A>auto (i, s, d) = make_tuple(33, "string", .14);
так это результат std::tie(). хотя тоже, удобно было бы... вот только на счет auto я тут не уверен. это выражение не создает новый тип.
пачка бумаги А4 стОит 2000 р, в ней 500 листов. получается, лист обычной бумаги стОит дороже имперского рубля =)
Здравствуйте, Evgeny.Panasyuk, Вы писали:
EP>Подойдёт?
хех!
маладца, быстро ты сообразил...не растерялся)
пока, вроде все логично смотрится, но нужно обдумать возможные побочные эффекты...
еще, подскажи, '$' — это какой-то особенный символ для препроцессора? или препроцессор его использует ровно так же, как и любой другой символ?
пачка бумаги А4 стОит 2000 р, в ней 500 листов. получается, лист обычной бумаги стОит дороже имперского рубля =)
Здравствуйте, niXman, Вы писали:
EP>>Подойдёт? X>хех! X>маладца, быстро ты сообразил...не растерялся)
X>пока, вроде все логично смотрится, но нужно обдумать возможные побочные эффекты...
да, конечно
X>еще, подскажи, '$' — это какой-то особенный символ для препроцессора? или препроцессор его использует ровно так же, как и любой другой символ?
Это простой символ из implementation-defined charset, поддерживается и в gcc и msvc — помню его использовал remark.
Можешь заменить допустим буквой T ...
Здравствуйте, niXman, Вы писали:
X>Здравствуйте, Abyx, Вы писали:
A>>auto (i, s, d) = make_tuple(33, "string", .14); X>так это результат std::tie(). хотя тоже, удобно было бы... вот только на счет auto я тут не уверен. это выражение не создает новый тип.
я имел ввиду чтобы auto (i, s, d) разворачивалось бы во что-то вроде
T1 i; T2 s; T3 d; tie(i, s, d) = ...
причем желательно, чтобы T1, T2, T3 могли бы быть не default-constructibe
эх, мечты-мечты...
на другой язык надо переходить, в С++ это все будет только в 202X
Здравствуйте, niXman, Вы писали:
EP>>помню его использовал remark. X>ах да, в своем проекте для выявления дата-рейсов в многопоточном коде.
Да, именно.
Мне кстати было интересно как он работает, но хотелось самому додуматься. В итоге сделал мини-клон, на базе Boost.Coroutine. Из примитивов есть пока-что mutex Если выйдет что-то более менее юзабельное, тогда выложу под BSD.
Здравствуйте, Abyx, Вы писали:
A>эх, мечты-мечты... A>на другой язык надо переходить, в С++ это все будет только в 202X
я на Rust поглядываю. весьма обещающая идея. и реализация на высоте, поверх llvm.
но стандарт все еще не утвержден.
пачка бумаги А4 стОит 2000 р, в ней 500 листов. получается, лист обычной бумаги стОит дороже имперского рубля =)
Здравствуйте, c-smile, Вы писали:
CS>Может как-то так гуманнее?
CS>#define $get(TT,I) std::get<I>(TT)
сильно отличается от синтаксиса в первом сообщении, да и длиннее на 5 символов.
CS>#define $length(TT) std::tuple_size<decltype(TT)>::value
согласен, про decltype для это цели я уже потом подумал.
P.S. А вообще меня и обычный синтаксис не напрягает. Тем более tuple не так часто нужны.
Например, если это тип возврата функции (тем более не лямбды) — то тут не трудно и обычную структуру объявить. Названия полей будут служить документацией, да и вызывающий код будет выглядеть понятней: res.some_meaningful_name vs res.first/get<0>(res). Тем более при наличии uniform initialization (а в C++98 — aggregate initialization)
Другое дело если результат это действительно набор безликих полей, либо типы полей результат CT-вычислений.
Здравствуйте, jazzer, Вы писали:
J>Не пойму, чем не устраивают обычные туплы, конкретно tie?
ну да, tie() — наименьшая из проблем. довольно лаконично записывается.
пачка бумаги А4 стОит 2000 р, в ней 500 листов. получается, лист обычной бумаги стОит дороже имперского рубля =)