Александр
#include <iostream> template<typename T> void foo(T a) { std::cout << " : " << a << std::endl; } void bar() {} template<typename T> void bar(T &&arg) { foo(std::forward<T>(arg)); } template<typename T, typename... Args> void bar(T &&arg, Args&&... args) { foo(std::forward<T>(arg)); bar(std::forward<Args>(args)...); } int main(int argc, char const *argv[]) { bar(1, "{2}",3.14, "[4]"); return 0; } g++ -std=c++11 -O2 t.cpp -o t.bin : 1 : {2} : 3.14 : [4]
ну.. это всё заменяется template<typename T> void foo(T a) { std::cout << " : " << a << std::endl; } template<typename... Args> void bar(Args... args) { int _[] { (foo(args), 0)... }; } int main(int argc, char const *argv[]) { bar(1, "{2}",3.14, "[4]"); return 0; } Да и форвард нет смысла юзать, если && не прописывать.
Maksim
мне еще рано таким людям писать
Maksim
я еще слишком дно
🐙 Antony
А еще есть буст девелопмент кукбук, автор тут тож есть)
Можно даже поэкспериментировать с кодом (покомпилить и позапускать) онлайн http://apolukhin.github.io/Boost-Cookbook-4880OS/
🐙 Antony
на здоровье :)
Maksim
:)
Maksim
очередной англ ман.... эх где мой томик английского
Konstantin
очередной англ ман.... эх где мой томик английского
Вобще, имхо, не надо бояться читать на англ, все равно в итоге придется, а привыкнешь быстро
Alexey
/me грустит потому что его вакансия С++алгоритмиста Maps.me не постится в работный канал :(
FailsBot
Alexey грустит потому что его вакансия С++алгоритмиста Maps.me не постится в работный канал :(
Valeriy
Да и советую вопрос перечитать
В вопросе было про стандарт. Просто распаковка ... так проиcходит. Это не связано с каким то прямо запретом стандрта. В 17-м немного изменили
Maksim
Вобще, имхо, не надо бояться читать на англ, все равно в итоге придется, а привыкнешь быстро
да стараюсь, меня напрягают сложные предложения и куча непонятных слов, потому что на уроках ни в школе, ни в вузе не учил их :D
Александр
В вопросе было про стандарт. Просто распаковка ... так проиcходит. Это не связано с каким то прямо запретом стандрта. В 17-м немного изменили
В вопросе было "почему запрещено?", а Вы прислали код, который намного длиннее приведённого (рабочего!), рекурсивно делающий тоже самое. Зачем?
Valeriy
В вопросе было "почему запрещено?", а Вы прислали код, который намного длиннее приведённого (рабочего!), рекурсивно делающий тоже самое. Зачем?
Ну ненадо так не надо. Вы написали что ваше решение кажется вам костыльным. Использовать массив — действительно хак. Рекрсия в этом случае более естественна, хотя и длиннее. Стандарт не заприщает вашу конструкцию. Она просто не работает так как вы написали. Параметры распаковываются через запятую до 17-го стандата.
Maksim
17й уже commit? или еще "почти почти"?
Maksim
Nikolai
commit
куда летит время? ТУт люди 11 плюсы не освоили, а мир уже 17 принял и использует
Konstantin
14 и 17 изи освоить
Konstantin
Там же в основном синтактический сахар и подобная фигня
🦥Alex Fails
14 и 17 изи освоить
+, большей частью багфиксы
Konstantin
Сами стандартизаторы говорят, что 14 и17 это фиксы 11
Александр
Тем более c++11,14,17 скорее упрощают код, нежели усложняют. Синтаксический сахар наоборот попроще изучать
Konstantin
Да)
Nikolai
Так и что вы рекомендуете? Сразу вместо 11 переходить на 17
Nikolai
имли 14?
Konstantin
Fixed
Konstantin
Не, курить 11
Nikolai
Не, курить 11
а потом перечитывать 14 и 17?
Konstantin
Да они короткие же
Nikolai
точнее штудировать*
Nikolai
И что у вас вот это foo(args), ...; скомпилилось?
ну если по новому стандарту - должно
Александр
И что у вас вот это foo(args), ...; скомпилилось?
На вид - да. Реально не тестил
Nikolai
17-й
ну его и имел ввиду
Александр
Александр
Не, не компилится. Выясняю
Александр
Во, заработало
Александр
https://godbolt.org/g/ZGqLa0
Александр
(foo(args), ...);
Anton
Интересно, а есть ли в планах у комитета добавить для tuple итераторы?
Александр
видел пропозал по for (blabla)... какой-то
Александр
явно итераторы не поюзаешь по очевидным причинам
Александр
а вот этакий constexpr цикл, который будет разворачиваться - было бы круто
Александр
https://stdcpp.ru/proposals/f0075759-68a5-47e4-b39b-8cfc76c33448
Александр
http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2017/p0589r0.pdf
Александр
первое превращается во второе при for constexpr (int i = 0; i < mytuple.size(); i++) { auto elem = std::get<i>(mytuple); // i is constexpr - okay, should compile }
Nikolai
Прикалывает меня cppreference ))) Нажимаешь на кнопку в примере "Run this code" , а он компилиться и выкидывает ошибки компиляции_)
🦥Alex Fails
ага, я в бота хочу добавить такую шляпу
🦥Alex Fails
и электрички тоже. специально вчера разбирался с электричками твоего региона. Теперь надо нормальный апи у бота зафигарить
Dr. Friedrich
Какие именно юниты?
Dr. Friedrich
А, единицы измерения?
Dr. Friedrich
Норм, это полезная тема.
Dr. Friedrich
Я как-то раз взялся валидировать единицы измерения у себя в физической модели, и нашёл баг.
Dr. Friedrich
Всё, что помогает нам в автоматическом режиме найти баг — абсолютное добро.
🦥Alex Fails
я тут тоже как-то с юнитами боролся
Dr. Friedrich
а кинь репу
Не, это не в опенсурсе :(
🦥Alex Fails
эх. а мини-PoC можешь в лс кинуть?
Berkus
вот это охуенчик
Berkus
люблю эту штуку
Berkus
эх. а мини-PoC можешь в лс кинуть?
да любая фигня где ты метры на ньютоны умножаешь, а на самом деле там были джоули, да и вообще дюймы
Nikolai
Какие именно? по какой системе и все такое, моя просто не в курсах что там пилить начлаи)
🦥Alex Fails
да любая фигня где ты метры на ньютоны умножаешь, а на самом деле там были джоули, да и вообще дюймы
да это да. я на шаблонах писал хуитень с хронопижней и прочей сранью, интересно, как решали похожую проблему другие
🐙 Antony
+1. Но там есть один человек, который говорит, что "если с помощью ваших unit нельзя оперировать такой единицей как аршин*золотник/рубль - у вас плохая система измерений"
Berkus
я брал boost.units или что-то такое
Berkus
https://dl.dropboxusercontent.com/s/6q7r5rzv8iwyfgd/2017-05-17%20at%2017.27.png ЗБС СПЕЦИФИКАЦИЯ!