我正在研究在模板中表示的最佳匹配算法,完整指南的实现如下
template<typename List>
class FrontT;
template<typename Head, typename... Tail>
class FrontT<Typelist<Head, Tail...>>
{
public:
using Type = Head;
};
template<typename List>
using Front = typename FrontT<List>::Type;
template<typename List>
class PopFrontT;
template<typename Head, typename... Tail>
class PopFrontT<Typelist<Head, Tail...>> {
public:
using Type = Typelist<Tail...>;
};
template<typename List>
using PopFront = typename PopFrontT<List>::Type;
template<typename List>
class LargestTypeT;
// recursive case:
template<typename List>
class LargestTypeT
{
private:
using First = Front<List>;
using Rest = typename LargestTypeT<PopFront<List>>::Type;
public:
using Type = IfThenElse<(sizeof(First) >= sizeof(Rest)), First, Rest>;
};
// basis case:
template<>
class LargestTypeT<Typelist<>>
{
public:
using Type = char;
};
template<typename List>
using LargestType = typename LargestTypeT<List>::Type;我很难理解的是下面这一行
using Type = IfThenElse<(sizeof(First) >= sizeof(Rest)), First, Rest>;很明显,First是TypeList和sizeof中的第一个元素,它就是这种类型的大小。但我和Rest混淆了。Rest的大小是多少?Rest它是一个包含在打字员中的其余元素的列表。
例如,如果定义了以下内容
LargestType<TypeList<int,bool,char>>在第一个循环中,First是int,sizeof是4,Rest是bool,char,sizeof是什么?在第二个循环中,First是bool,sizeof是1,Rest是char,sizeof是1。
发布于 2019-07-20 17:17:35
休息的大小是多少?其余的是一个包含在打字员中的其余元素的列表。
不,Rest (名称有点差)实际上不是列表的其余部分,而是列表其余部分中最大的类型,从它的定义中可以看出:
using Rest = typename LargestTypeT<PopFront<List>>::Type;发布于 2019-07-20 17:17:59
我和其他人搞混了。休息的大小是多少?其余的是一个包含在打字员中的其余元素的列表。
看看Rest的定义
using Rest = typename LargestTypeT<PopFront<List>>::Type;Rest是List中最大的类型,不包括(PopFront)第一类(First)。
在第一个循环中,首先是int和sizeof是4 Rest是bool,char,大小是多少?在第二个循环中,首先是bool,sizeof是1,Rest是char,sizeof是1。
不完全同意。
在第一个循环中,First是int,Rest是bool。
在第二个循环中(第一个循环的Rest被选择为bool),First是bool,Rest是char。
在第三个循环中(第二个循环的Rest被选择为char),First是char,Rest是char。
在第四个循环中,您有基本大小写(或基本大小写,如您所愿)。
template<>
class LargestTypeT<Typelist<>>
{
public:
using Type = char;
};选择Type (第三个循环中的Rest )作为char
https://stackoverflow.com/questions/57126896
复制相似问题