Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.71/7: Рейтинг темы: голосов - 7, средняя оценка - 4.71
183 / 181 / 66
Регистрация: 15.02.2015
Сообщений: 515
1

Variadic template lambda capture

30.06.2016, 10:22. Показов 1464. Ответов 1

Доброго всем дня!
Речь пойдёт об C++14, в котором стало возможным делать прямую передачу в замыкание:
C++
1
auto my_lambda = [ptr = unique_ptr<MyType>(raw_ptr)] () { /* используем ptr */ };
Очень удобно передавать универсальную ссылку:
C++
1
2
3
4
5
6
7
template <typename T>
void some_func(T&& arg)
{
    //...
    auto my_lambda = [arg = forward<T>(arg)] () { /* используем arg */ };
    //...
}
Вопрос: как захватить в замыкание varidic templates через forward?
C++
1
2
3
4
5
6
7
template <typename ...T>
void some_func(T&& ...args)
{
    //...
    auto my_lambda = [args = forward<T>(args)...] () { /* используем args */ }; //так не прокатит
    //...
}
Хочу заменить std::bind на лямбда выражение, но вот незадача. Вроде как-то можно через std::tuple?
0

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
30.06.2016, 10:22
Ответы с готовыми решениями:

Lambda init capture by const reference
Всем привет. Почему не получается добиться следующего поведения: auto main() -&gt; int { ...

Lambda Capture — extending object's lifetime
Всем привет! // --- Поясняющий псевдокод. void SomeClass::func(Movable m) { Attribute&amp; attr...

Ошибки: capture of non-variable Game::templog, 'this' was not captured for this lambda function
Пытаюсь очистить вектор mainlog от записей, встречающихся в векторе templog. Решение подсмотрел...

Variadic template
Добрый день, господа. Будьте добры, помогите кто может. Есть у меня шаблонный класс ...

1
Игогошка!
1801 / 708 / 44
Регистрация: 19.08.2012
Сообщений: 1,367
30.06.2016, 11:56 2
Operok, типа
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <iostream>
#include <experimental/tuple>
#include <vector>
using namespace std;
 
template<typename ...T>
void foo(T&& ...pars) {
    auto bar = [](auto&& ...pars) { return sizeof...(pars); };
    auto lbd = [args = forward_as_tuple(pars...), bar]() {
        return experimental::apply(bar, args);
    };
    cout << "Size: " << lbd();
}
 
int main() {
   int a = 1;
   double b = 3.0;
   string c = "ololo";
   foo(a, b, c, 6, vector<int>(3));
}
?
5
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
30.06.2016, 11:56

Не работает variadic template
привет. код #include &lt;typeinfo&gt; #include &lt;iostream&gt; #include &lt;deque&gt; using namespace std; ...

recursion with variadic template
#define NOT_COMPILE 1 #if NOT_COMPILE // так не компилится template &lt;class Type, unsigned...

Как правильно перебросить аргументы в variadic template?
всем привет, можете помочь пж, есть такая ф-ция: template&lt;typename ... Args&gt; inline wstring...

Variadic Templates - как обращаться к аргументам variadic-функции?
Всем привет! Наверное, рано мне ещё с моими скудными знаниями в это лезть, но, изучив шаблоны и...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.