【发布时间】:2018-07-19 14:47:35
【问题描述】:
所以正如标题所说,我正在尝试实现一个小版本的 std::tie 和 std::tuple 用于学习目的。
到目前为止,这是我的代码:
#include <iostream>
using namespace std;
template<typename T1, typename T2>
class Tuple
{
public:
T1 t1;
T2 t2;
template<typename Tr1, typename Tr2>
Tuple(Tr1 tr1, Tr2 tr2) : t1(tr1), t2(tr2)
{
}
template<typename Tr1, typename Tr2>
Tuple<T1, T2>& operator =(const Tuple<Tr1, Tr2>& other)
{
t1 = other.t1;
t2 = other.t2;
return *this;
}
};
template<typename T1, typename T2>
Tuple<T1&, T2&> Tie(T1& t1, T2& t2)
{
return Tuple<T1&, T2&>(t1, t2);
}
Tuple<int, int> f()
{
return Tuple<int, int>(3, 5);
}
int main()
{
int hi, bye;
Tie(hi, bye) = f();
cout << hi << " " << bye << '\n';
}
它几乎可以工作了(或者至少我认为可以)。 我调试看看
- Tuple(3, 5) 已成功实例化。那么,
- 元组(引用 hi 和 bye)已成功实例化。
- 然后最后调用赋值操作符,将后者赋值给前者,即引用赋值为 3 和 5。
但是一旦 operator= 返回,hi 和 bye 将只有未初始化的值:(
我做错了什么?
【问题讨论】:
标签: c++ c++11 tuples std stdtuple