C/C++教程

编译器链表 c++

本文主要是介绍编译器链表 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();
}
这篇关于编译器链表 c++的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!