c – 提升MPL占位符和Lambda

我正在使用boost :: mpl对概念样本做一些证明,并且在理解lambda函数如何使用占位符方面遇到一些困难.

我意识到我可以在元函数类中包装元函数,以使更高阶的函数能够访问嵌套的apply函数,并且意识到可以通过使用允许占位符的元函数mpl :: lambda来避免这种努力.

这怎么实际工作?我的头脑围绕着喇叭和占位符在封面下实际做了很麻烦.

解决方法

请参阅 Boost.MPL manual:占位符是mpl :: arg< X>形式的元功能类.元功能类是包含应用元功能的类.
template <int N> struct arg; // forward declarations
struct void_;

template <>
struct arg<1>
{
    template <
      class A1,class A2 = void_,... class Am = void_>
    struct apply
    {
        typedef A1 type; // return the first argument
    };
};
typedef arg<1> _1

mpl :: lambda的工作是将占位符表达式转换为元函数类.这是通过嵌入像this这样的元功能类完成的:

template<
      typename X,typename Tag = unspecified
    >
struct lambda
{
    typedef unspecified type;
};

如果x是通用形式X< a1,... an>中的占位符表达式,其中X是类模板,a1,… an是任意类型,嵌入的未指定类型f等价于

typedef protect< bind<
      quoten<X>,lambda<a1>::type,... lambda<an>::type
> > f;

否则,f与X相同.应用元功能通过访问嵌入式类型来计算lambda表达式.

在MPL manual中,您可以查找保护,绑定和引用的定义.他们都是围绕他们的论据,尽可能延迟评估.

相关文章

本程序的编译和运行环境如下(如果有运行方面的问题欢迎在评...
水了一学期的院选修,万万没想到期末考试还有比较硬核的编程...
补充一下,先前文章末尾给出的下载链接的完整代码含有部分C&...
思路如标题所说采用模N取余法,难点是这个除法过程如何实现。...
本篇博客有更新!!!更新后效果图如下: 文章末尾的完整代码...
刚开始学习模块化程序设计时,估计大家都被形参和实参搞迷糊...