std::forward_as_tuple
Материал из cppreference.com
<tbody>
</tbody>
| Определено в заголовочном файле <tuple>
|
||
template< class... Types > tuple<Types&&...> forward_as_tuple( Types&&... args ) noexcept; |
(начиная с C++11) (constexpr since C++14) |
|
Создаёт кортеж ссылок на аргументы в args, подходящий для передачи в качестве аргумента функции. Кортеж имеет ссылочные элементы данных rvalue, когда rvalue используются в качестве аргументов, и в противном случае имеет ссылочные элементы данных lvalue.
Параметры
| args | — | ноль или более аргументов для построения кортежа |
Возвращаемое значение
Объект std::tuple, созданный как бы с помощью std::tuple<Types&&...>(std::forward<Types>(args)...)
Примечание
Если аргументы являются временными, forward_as_tuple не продлевает их время жизни; они должны использоваться до конца полного выражения.
Пример
Запустить этот код
#include <iostream>
#include <map>
#include <tuple>
#include <string>
int main()
{
std::map<int, std::string> m;
m.emplace(std::piecewise_construct,
std::forward_as_tuple(10),
std::forward_as_tuple(20, 'a'));
std::cout << "m[10] = " << m[10] << '\n';
// Следующее это ошибка: создаётся
// std::tuple<int&&, char&&> содержащий две висячие ссылки.
//
// auto t = std::forward_as_tuple(20, 'a');
// m.emplace(std::piecewise_construct, std::forward_as_tuple(10), t);
}
Вывод:
m[10] = aaaaaaaaaaaaaaaaaaaa
Смотрите также
(C++11) |
создаёт объект tuple типа, определённого типами аргументов (шаблон функции) |
| создаёт std::tuple левосторонних ссылок или распаковывает кортеж на отдельные объекты (шаблон функции) | |
(C++11) |
создаёт tuple, объединяя любое количество кортежей (шаблон функции) |
(C++17) |
вызывает функцию с кортежем аргументов (шаблон функции) |