C++ Boost MPL占位符和Lambda

C++ Boost MPL占位符和Lambda,c++,boost,lambda,template-meta-programming,boost-mpl,C++,Boost,Lambda,Template Meta Programming,Boost Mpl,我目前正在使用boost::mpl对概念示例进行验证,在理解lambda函数如何支持占位符的使用方面遇到了一些困难 我意识到我可以在元函数类中包装元函数,以使高阶函数能够访问嵌套的apply函数,并且意识到可以通过使用mpl::lambda包装允许占位符的元函数来避免这种努力 这实际上是如何工作的?我很难理解lamda和占位符在封面下的实际用途。请参见:占位符是一个形式为mpl::arg的元函数类。元函数类是包含apply元函数的类 template <int N> struct a

我目前正在使用boost::mpl对概念示例进行验证,在理解lambda函数如何支持占位符的使用方面遇到了一些困难

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

这实际上是如何工作的?我很难理解lamda和占位符在封面下的实际用途。

请参见:占位符是一个形式为
mpl::arg
的元函数类。元函数类是包含
apply
元函数的类

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

如果x是一般形式的占位符表达式
x,则还可以查找
protect
bind
quote
的定义。他们都是围绕自己的论点进行包装,以尽可能长时间推迟评估。

清晰简洁的答案-应该被OP接受。谢谢,很高兴能提供帮助!
template<
      typename X
    , typename Tag = unspecified
    >
struct lambda
{
    typedef unspecified type;
};
typedef protect< bind<
      quoten<X>
    , lambda<a1>::type,... lambda<an>::type
> > f;