Функция forward_as_tuple
Функция forward_as_tuple создает кортеж из ссылок
на переданные аргументы, сохраняя их категории значений
(lvalue или rvalue). Это позволяет осуществлять идеальную
передачу аргументов без их копирования. В параметры функции
мы передаем произвольный набор аргументов, для каждого из
которых будет создана ссылка соответствующего типа.
Синтаксис
#include <tuple>
std::forward_as_tuple(args...)
Пример
Давайте создадим кортеж ссылок на переменные и изменим значение одного из элементов:
#include <iostream>
#include <tuple>
#include <string>
using namespace std;
int main()
{
int a = 1;
string b = "abcde";
auto res = forward_as_tuple(a, b);
get<0>(res) = 42;
get<1>(res) = "12345";
cout << a << endl;
cout << b << endl;
return 0;
}
Результат выполнения кода:
42
12345
Пример
Давайте передадим временные значения в кортеж и проверим типы полученных ссылок:
#include <iostream>
#include <tuple>
#include <type_traits>
using namespace std;
int main()
{
int a = 1;
auto res = forward_as_tuple(a, 2);
cout << boolalpha;
cout << is_lvalue_reference<decltype(get<0>(res))>::value << endl;
cout << is_rvalue_reference<decltype(get<1>(res))>::value << endl;
return 0;
}
Результат выполнения кода:
true
true
Смотрите также
-
функция
make_tuple,
которая создает кортеж из значений -
функция
tie,
которая создает кортеж lvalue-ссылок -
функция
make_pair,
которая создает пару из двух значений -
функция
any_cast,
которая извлекает значение из объекта any