Информация об изменениях

Сообщение Re: Perfect forward, как ? от 23.10.2019 8:06

Изменено 23.10.2019 8:08 rg45

Re: Perfect forward, как ?
Здравствуйте, Videoman, Вы писали:

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>
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(). С тем лишь преимуществом, что определение рукописных шаблонов, ни в каком виде, не разрешено в области видимости функций.