はBoost.MPL manualを見る:プレースホルダがフォーム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
これは、メタ関数クラスにプレースホルダ式をオンにする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
と同じです。 apply
メタ機能は、埋め込み型にアクセスしてラムダ式を評価します。
MPL manualでは、protect
,bind
およびquote
の定義も参照できます。彼らは、できるだけ評価を遅らせるために、議論の周りにすべてラッパーです。
明確で簡潔な答えは - OPに受け入れられている必要があります。 – etherice
ありがとう、助けになってうれしい! – TemplateRex