元组tuple是多类型的集合,可以当做升级版的pair来用。因为tuple可以保存多个任意类型的值,导致不能够在一个类里面保存所有的数据,所以采用每一层保存一个数据的方法实现
实现tuple
template <typename... Args>
class tuple
{
};
/* 每一层保存一个T类型的数据 */
template <typename T, typename... Args>
class tuple<T, Args...> : public tuple<Args...>
{
public:
tuple() = default;
tuple(T&& t, Args&&... args)
: tuple<Args...>(std::forward<Args>(args)...),
value_(std::forward<T>(t))
{ }
template <std::size_t N>
decltype(auto) get() {
static_assert(N<=sizeof...(Args));
if constexpr (N == 0) {
return (value_);
}
else {
return (this->tuple<Args...>::template get<N - 1>());
}
}
template <std::size_t N>