【发布时间】:2019-11-29 07:12:57
【问题描述】:
我正在调查模板中表示的最佳匹配算法,完整指南 实现如下
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 它是一个列表,其中包含 typelist 中包含的其余元素。
例如,如果定义如下
LargestType<TypeList<int,bool,char>>
在第一个循环中
First 是 int 和 sizeof 是 4
Rest 是 bool,char ,sizeof 是什么?
在第二个循环中
First 是 bool 和 sizeof 是 1
Rest 是 char 和 sizeof 是 1
【问题讨论】:
标签: c++ templates recursion variadic-templates template-meta-programming