本篇文章主要介绍了"c++11模拟boost元占位符placeholder",主要涉及到索引方面的内容,对于C/C++jrs看球网直播吧_低调看直播体育app软件下载_低调看体育直播感兴趣的同学可以参考一下:
准备实现meta programming的fold函数,发现自己缺少占位符实现,这样传入fold的transform op类(元函数)都不得不另外写个外覆类,其...
准备实现meta programming的fold函数,发现自己缺少占位符实现,这样传入fold的transform op类(元函数)都不得不另外写个外覆类,其实我觉得没啥不好,简单直接,说实话干扰什么的没那么严重,一个功能块里能用fold的地方能有几次?但动了占位符这个念头,就想尝试实现一下。
看一下实际情景:
template
struct fold_s {};
我们可能会希望把push_back作为运算子传入fold_s中,从而实现循环迭代TList的每一个元素,对其应用push_back。如:
using type = fold_s<>, nullist, push_back>::type;
问题是,push_back并不是一个类,只是一个声明,push_back如此才是一个真正的类,而一般只有类才能作为实参传入。
最直接的做法是写个外覆类:

struct push_back_wrap
{
template
struct apply
{
using type = typename mpl::push_back::type;
};
};

传入fold_s然后调用apply:

template
struct fold_s
{
using sometype = typename TransformOp::apply::type;
};
using type = fold_s<>, nullist, push_back_wrap>::type;

我们知道很多函数语言的一个特征就是延迟计算。此处push_back_wrap中的嵌套类apply,使得push_back_wrap也具有延迟的特性,类型计算直到fold_s真正应用apply时
才发生。这就是meta programming中实现lambada的手法。缺点是我们必须要在使用lambda元类的地方都默认假设apply存在。相比于它的强大功能,因为c++ mpl的
限制导致这个小不便,我们就忍忍吧。