Сообщение Re: Perfect forward, как ? от 23.10.2019 8:06
Изменено 23.10.2019 8:08 rg45
Re: Perfect forward, как ?
Здравствуйте, Videoman, Вы писали:
V>Добрый день всем любителям современного С++ 17.
V>В процессе разработки сложного библиотечного кода возникли вопросы. Код сильно упрощен:
V>
Начнем с главного, как сделать forward reference. Очень просто:
V>Я в курсе что пока шаблонных лямбд нет, поэтому:
То, что ты написал, это и есть шаблонная лямбда, а точнее класс шаблонным оператором operator(). С тем лишь преимуществом, что определение рукописных шаблонов, ни в каком виде, не разрешено в области видимости функций.
V>Добрый день всем любителям современного С++ 17.
V>В процессе разработки сложного библиотечного кода возникли вопросы. Код сильно упрощен:
V>
V> template <typename Callable, typename ...Params>
V> void Func(Params&& ...params)
V> {
V> auto Func2 = [](auto&&... params)
V> {
V> Callable(params...); // Как тут сделать forward_reference ???
V> };
V> Func2(std::forward<Params>(params...));
V> }
V>
Начнем с главного, как сделать forward reference. Очень просто:
Callable(std::forward<decltype(params)>(params)...);
V>Я в курсе что пока шаблонных лямбд нет, поэтому:
То, что ты написал, это и есть шаблонная лямбда, а точнее класс шаблонным оператором operator(). С тем лишь преимуществом, что определение рукописных шаблонов, ни в каком виде, не разрешено в области видимости функций.
Re: Perfect forward, как ?
Здравствуйте, Videoman, Вы писали:
V>Добрый день всем любителям современного С++ 17.
V>В процессе разработки сложного библиотечного кода возникли вопросы. Код сильно упрощен:
V>
Начнем с главного, как сделать forward reference. Очень просто:
V>Я в курсе что пока шаблонных лямбд нет, поэтому:
То, что ты написал, это и есть шаблонная лямбда, а точнее класс с шаблонным оператором operator(). С тем лишь преимуществом, что определение рукописных шаблонов, ни в каком виде, не разрешено в области видимости функций.
V>Добрый день всем любителям современного С++ 17.
V>В процессе разработки сложного библиотечного кода возникли вопросы. Код сильно упрощен:
V>
V> template <typename Callable, typename ...Params>
V> void Func(Params&& ...params)
V> {
V> auto Func2 = [](auto&&... params)
V> {
V> Callable(params...); // Как тут сделать forward_reference ???
V> };
V> Func2(std::forward<Params>(params...));
V> }
V>
Начнем с главного, как сделать forward reference. Очень просто:
Callable(std::forward<decltype(params)>(params)...);
V>Я в курсе что пока шаблонных лямбд нет, поэтому:
То, что ты написал, это и есть шаблонная лямбда, а точнее класс с шаблонным оператором operator(). С тем лишь преимуществом, что определение рукописных шаблонов, ни в каком виде, не разрешено в области видимости функций.