то, что кортежи стали частью стандарта — это замечательно, не спорю.
но декларация кортежей и доступ к их элементам — сводят на нет все плюсы кортежей %)
возможно, уже кто-то задавался аналогичным вопросом — нужна тулза, предоставляющая альтернативный синтаксис, и которую можно включить в 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 листов. получается, лист обычной бумаги стОит дороже имперского рубля =)
Здравствуйте, 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>Подойдёт?
хех!
маладца, быстро ты сообразил...не растерялся)
пока, вроде все логично смотрится, но нужно обдумать возможные побочные эффекты...
еще, подскажи, '$' — это какой-то особенный символ для препроцессора? или препроцессор его использует ровно так же, как и любой другой символ?
пачка бумаги А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 листов. получается, лист обычной бумаги стОит дороже имперского рубля =)