首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >利用元编程技术寻找最佳匹配

利用元编程技术寻找最佳匹配
EN

Stack Overflow用户
提问于 2019-07-20 17:04:58
回答 2查看 64关注 0票数 1

我正在研究在模板中表示的最佳匹配算法,完整指南的实现如下

代码语言:javascript
复制
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;

我很难理解的是下面这一行

代码语言:javascript
复制
using Type = IfThenElse<(sizeof(First) >= sizeof(Rest)), First, Rest>;

很明显,FirstTypeListsizeof中的第一个元素,它就是这种类型的大小。但我和Rest混淆了。Rest的大小是多少?Rest它是一个包含在打字员中的其余元素的列表。

例如,如果定义了以下内容

代码语言:javascript
复制
LargestType<TypeList<int,bool,char>>

在第一个循环中,Firstintsizeof是4,Restbool,charsizeof是什么?在第二个循环中,Firstboolsizeof是1,Restcharsizeof是1。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-07-20 17:17:35

休息的大小是多少?其余的是一个包含在打字员中的其余元素的列表。

不,Rest (名称有点差)实际上不是列表的其余部分,而是列表其余部分中最大的类型,从它的定义中可以看出:

代码语言:javascript
复制
using Rest = typename LargestTypeT<PopFront<List>>::Type;
票数 2
EN

Stack Overflow用户

发布于 2019-07-20 17:17:59

我和其他人搞混了。休息的大小是多少?其余的是一个包含在打字员中的其余元素的列表。

看看Rest的定义

代码语言:javascript
复制
using Rest = typename LargestTypeT<PopFront<List>>::Type;

RestList中最大的类型,不包括(PopFront)第一类(First)。

在第一个循环中,首先是int和sizeof是4 Rest是bool,char,大小是多少?在第二个循环中,首先是bool,sizeof是1,Rest是char,sizeof是1。

不完全同意。

在第一个循环中,FirstintRestbool

在第二个循环中(第一个循环的Rest被选择为bool),FirstboolRestchar

在第三个循环中(第二个循环的Rest被选择为char),FirstcharRestchar

在第四个循环中,您有基本大小写(或基本大小写,如您所愿)。

代码语言:javascript
复制
template<>
class LargestTypeT<Typelist<>>
{
 public:
  using Type = char;
};

选择Type (第三个循环中的Rest )作为char

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57126896

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档