C++11一个元组的简单实现

下面是实现一个元组的简单思路


代码如下:

#ifndef MY_TUPLE_HPP
#define MY_TUPLE_HPP

template <typename... Args>
class my_tuple {};

template <typename T>
class my_tuple<T>
{
public:
	typedef my_tuple<>  base_type;
	typedef my_tuple<T> this_type;
	typedef T           element_type;
	my_tuple(const T& t) : element_(t) {}

	T& get()
	{
		return element_;
	}

private:
	T element_;
};

template <typename T, typename... Args>
class my_tuple<T, Args...> : public my_tuple<Args...>
{
public:
	typedef my_tuple<Args...>    base_type;
	typedef my_tuple<T, Args...> this_type;
	typedef T                    element_type;
		 
	my_tuple(const T& t, Args... args) : base_type(args...), element_(t) {}

	T& get() 
	{
		return element_;
	}

private:
	T element_;
};

template <size_t N, typename T, typename... Args>
struct select {};

template <typename T, typename... Args>
struct select<0, my_tuple<T, Args...>>
{
	typedef my_tuple<T, Args...> this_type;
	typedef T                    element_type;
};

template <size_t N, typename T,typename... Args>
struct select<N, my_tuple<T, Args...>>
{
	typedef typename select<N - 1, my_tuple<T, Args...>>::this_type::base_type    this_type;
	typedef typename select<N - 1, my_tuple<T, Args...>>::this_type::base_type::element_type element_type;
};


template <typename... Args>
struct counter {};

template <>
struct counter<>
{
	static const size_t count = 0;
};

template <typename T, typename... Args>
struct counter<T, Args...>
{
	static const size_t count = counter<Args...>::count + 1;
};


template <size_t N, typename... Args>
typename select<N, my_tuple<Args...>>::element_type&
my_tuple_get(my_tuple<Args...>& tup)
{
	return (static_cast<typename select<N, my_tuple<Args...>>::this_type&>(tup)).get();
}

template <typename... Args>
my_tuple<Args...> make_my_tuple(Args... args)
{
	typedef my_tuple<Args...> tuple_type;
	return tuple_type(args...);
}

template <typename... Args>
size_t get_my_tuple_size(my_tuple<Args...>& tup)
{
	return counter<Args...>::count;
}


#endif





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值