在CSDN上看了这样一篇文章
“CSDN_递归之美 - Loki库TypeList源码剖析”
中间提到TypeList类的实现,我觉得讲得特别好,但是有几点不懂,希望哪位大侠讲解。 //TypeAT的实现 - 获取给定位置处的元素
//仅有声明,没有实现,如果所传入的类型不是TypeLsit的话,会产生一个编译期错误
template <class TList, unsigned int index> struct TypeAt;
template <class Head, class Tail>
struct TypeAt<Typelist<Head, Tail>, 0>
// 递归调用的结束条件,如果给定位置为0,则返回TypeList中的第一个元素 {
typedef Head Result;
}; template <class Head, class Tail, unsigned int i>
//递归规则定义,注意这里的返回结果为类型, struct TypeAt<Typelist<Head, Tail>, i>
// 运用了类型萃取技术。typename关键字的作用是告诉编译器其后的实体是类型。
{
typedef typename TypeAt<Tail, i - 1>::Result Result;
};
注释是原文作者加的。
问题
1)看不懂这句话的语法template <class TList, unsigned int index> struct TypeAt;
呵呵,我的C++书上讲template讲得很简单,哪位给我解释一下。
(特别是后面跟着struct TypeAt是什么意思,TypeAt不是一个函数吗?)2) struct TypeAt<Typelist<Head, Tail>, 0>
// 递归调用的结束条件,如果给定位置为0,则返回TypeList中的第一个元素 {
typedef Head Result;
};
这里开头的struct是说TypeAt会返回一个struct,直接返回Head就可以了,但是这里为什么要使用typedef?3)还有这一句typedef typename TypeAt<Tail, i - 1>::Result Result;
作者的解释“typename关键字的作用是告诉编译器其后的实体是类型。”
不过还是看不懂这句。我去查了很多C++的书都没有找到以上几个问题的解释,
希望哪位大侠给我一个详细一点的解释,谢谢!
“CSDN_递归之美 - Loki库TypeList源码剖析”
中间提到TypeList类的实现,我觉得讲得特别好,但是有几点不懂,希望哪位大侠讲解。 //TypeAT的实现 - 获取给定位置处的元素
//仅有声明,没有实现,如果所传入的类型不是TypeLsit的话,会产生一个编译期错误
template <class TList, unsigned int index> struct TypeAt;
template <class Head, class Tail>
struct TypeAt<Typelist<Head, Tail>, 0>
// 递归调用的结束条件,如果给定位置为0,则返回TypeList中的第一个元素 {
typedef Head Result;
}; template <class Head, class Tail, unsigned int i>
//递归规则定义,注意这里的返回结果为类型, struct TypeAt<Typelist<Head, Tail>, i>
// 运用了类型萃取技术。typename关键字的作用是告诉编译器其后的实体是类型。
{
typedef typename TypeAt<Tail, i - 1>::Result Result;
};
注释是原文作者加的。
问题
1)看不懂这句话的语法template <class TList, unsigned int index> struct TypeAt;
呵呵,我的C++书上讲template讲得很简单,哪位给我解释一下。
(特别是后面跟着struct TypeAt是什么意思,TypeAt不是一个函数吗?)2) struct TypeAt<Typelist<Head, Tail>, 0>
// 递归调用的结束条件,如果给定位置为0,则返回TypeList中的第一个元素 {
typedef Head Result;
};
这里开头的struct是说TypeAt会返回一个struct,直接返回Head就可以了,但是这里为什么要使用typedef?3)还有这一句typedef typename TypeAt<Tail, i - 1>::Result Result;
作者的解释“typename关键字的作用是告诉编译器其后的实体是类型。”
不过还是看不懂这句。我去查了很多C++的书都没有找到以上几个问题的解释,
希望哪位大侠给我一个详细一点的解释,谢谢!
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货