std::tie
来自cppreference.com
定义于头文件 <tuple>
|
||
template< class... Types > std::tuple<Types&...> tie( Types&... args ) noexcept; |
(C++11 起) (C++14 前) |
|
template< class... Types > constexpr std::tuple<Types&...> tie( Types&... args ) noexcept; |
(C++14 起) | |
创建到其参数或 std::ignore 实例的左值引用的 tuple 。
参数
args | - | 构造 tuple 所用的零或更多左值参数 |
返回值
含左值引用的 std::tuple 对象。
可能的实现
template <typename... Args> constexpr // C++14 起 std::tuple<Args&...> tie(Args&... args) noexcept { return {args...}; } |
注解
std::tie
可用于解包 std::pair ,因为 std::tuple 拥有从 pair 的转换赋值:
bool result; std::tie(std::ignore, result) = set.insert(value);
示例
std::tie
能用于引入字典序比较到结构体,或解包 tuple :
运行此代码
#include <iostream> #include <string> #include <set> #include <tuple> struct S { int n; std::string s; float d; bool operator<(const S& rhs) const { // 比较 n 与 rhs.n, // 然后为 s 与 rhs.s, // 然后为 d 与 rhs.d return std::tie(n, s, d) < std::tie(rhs.n, rhs.s, rhs.d); } }; int main() { std::set<S> set_of_s; // S 为可比较小于 (LessThanComparable) S value{42, "Test", 3.14}; std::set<S>::iterator iter; bool inserted; // 解包 insert 的返回值为 iter 与 inserted std::tie(iter, inserted) = set_of_s.insert(value); if (inserted) std::cout << "Value was inserted successfully\n"; }
输出:
Value was inserted successfully
参阅
结构化绑定 (C++17) | 绑定指定的名字到初始化器的子对象或元组元素 |
创建一个 tuple 对象,其类型根据各实参类型定义 (函数模板) | |
创建转发引用的 tuple (函数模板) | |
通过连接任意数量的元组来创建一个tuple (函数模板) | |
用 tie 解包 tuple 时用来跳过元素的占位符 (常量) |