编译器链表 c++

#include<iostream>
using namespace std;


//简单的编译器相加
template<typename T>
struct addfunc {
    
    
	template<T a,T b>
	struct add {
    
    
		static constexpr T sum = a + b;
	};
};
//链表结构
template<typename T,T ...list>
struct List {
    
    };
//打印链表
template<typename List>
struct Print{
    
    };

template<typename T,T head,T ...datas>
struct Print<List<T, head,datas...>> {
    
    
	static void print() {
    
    
		cout << head << endl;
		Print<List<T, datas...>>::print();
	}
};
template<typename T,T tail>
struct Print<List<T, tail>> {
    
    
	static void print() {
    
    
		cout << tail << endl;
	}
};

template<typename T,T val,typename List>
struct PushHead{
    
    };
template<typename T,T val,T...datas>
struct PushHead<T, val, List<T, datas...>> {
    
    
	using value = List<T, val, datas...>;
};
template<typename T, T val, typename List>
struct PushTail {
    
    };
template<typename T, T val, T...datas>
struct PushTail<T, val, List<T, datas...>> {
    
    
	using value = List<T, datas...,val>;
};
template<typename List>
struct PopHead {
    
    };
template<typename T,T head,T ...tails>
struct PopHead < List<T, head, tails...>>{
    
    
	using value = List<T, tails...>;
};
//tail 的实现就不想写了,思路,reverse一下PopHead再reverse回去,毕竟可变参数不支持放在前面
template<typename List>
struct PopTail {
    
    
	using value = List;
};


int main() {
    
    
	Print<PopTail<List<int,1, 2, 3>>::value>::print();
}

猜你喜欢

转载自blog.csdn.net/weixin_39057744/article/details/120797726