读loki有感,TYPEList原理
问题一,简化版的TYPEList,只支持int型
template<int n>
class TYPEList
{
public:
int Head;
TYPEList<n-1> Tail;
};
template<>
class TYPEList<0>
{
public:
int Tail;
int Head;
};
测试代码
TYPEList<0> l0;
l0.Head = 1;
l0.Tail = 2;
TYPEList<2> l2;
l2.Head = 3;
l2.Tail.Head = 4;
l2.Tail.Tail.Head = 5;
l2.Tail.Tail.Tail = 6;
问题二:可以同过GetAt(int)获取值
template<int n>
class TYPEList
{
public:
int Head;
TYPEList<n-1> Tail;
int GetAt(int index )
{
if( n+1 == index )
return Head;
return Tail.GetAt(index);
}
};
template<>
class TYPEList<0>
{
public:
int GetAt(int index)
{
if( 1 == index )
return Tail;
return Head;
}
int Tail;
int Head;
};
测试代码
TYPEList<0> l0;
l0.Head = 1;
l0.Tail = 2;
TYPEList<2> l2;
l2.Head = 3;
l2.Tail.Head = 4;
l2.Tail.Tail.Head = 5;
l2.Tail.Tail.Tail = 6;
int i1 = l2.GetAt(0);
int i2 = l2.GetAt(1);
int i3 = l2.GetAt(2);
int i4 = l2.GetAt(3);
问题三,类型不再限于int,但最多集成3个变量。
class NullType
{
};
template <class T, class U>
struct Typelist
{
T Head;
U Tail;
};
template <typename T1 = NullType, typename T2 = NullType, typename T3 = NullType >
struct MakeTypelist
{
private:
typedef typename MakeTypelist< T2 ,T3>::Result TailResult;
public:
typedef Typelist<T1, TailResult> Result; };
template<>
struct MakeTypelist<>
{
typedef NullType Result;
};
测试代码:
MakeTypelist<ULONG,CString,int>::Result User,User2;
User.Head = 1;
User.Tail.Head = "何志丹";
User.Tail.Tail.Head = 35;
User2 = User;
template <class AtomicType, template <class> class GenFunc>
struct IterateTypes
{ template<class II>
void operator()(II ii)
{
GenFunc<AtomicType> genfunc;
*ii = genfunc();
++ii; //Is this even needed?
}
};
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
· 三行代码完成国际化适配,妙~啊~
2022-03-17 按下Ctrl弹出一个对话框松开关闭此对话框,如何实现?