Bla*_*son 11 c++ lambda boost boost-mpl template-meta-programming
我目前正在使用boost :: mpl对概念样本进行一些证明,并且在理解lambda函数如何使用占位符方面遇到了一些困难.
我意识到我可以将metafunctions包装在元函数类中,以使更高阶函数能够访问嵌套的apply函数,并且已经意识到你可以通过使用mpl :: lambda包装允许占位符的元函数来避免这种努力.
这实际上是如何工作的?我无法将我的头包裹在lamda和占位符实际上在封面下做什么.
Tem*_*Rex 13
请参阅Boost.MPL手册:占位符是表单的元函数类mpl::arg<X>.元函数类是包含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
Run Code Online (Sandbox Code Playgroud)
mpl::lambda将占位符表达式转换为元函数类是一项工作.这是通过嵌入元函数类喜欢做这样:
template<
typename X
, typename Tag = unspecified
>
struct lambda
{
typedef unspecified type;
};
Run Code Online (Sandbox Code Playgroud)
如果x是一般形式的占位符表达式X<a1,...an>,其中X是类模板并且a1,... an是任意类型,则嵌入的未指定类型f等效于
typedef protect< bind<
quoten<X>
, lambda<a1>::type,... lambda<an>::type
> > f;
Run Code Online (Sandbox Code Playgroud)
否则,f是相同的X.所述apply元函数通过访问埋入型评估lambda表达式.
在MPL 手册,你可以查找的定义protect,bind并quote为好.他们都是围绕他们的论点的包装者,以尽可能地延迟评估.