DSL для boost::MPL, превращаем f(x) в f<x>::type
2 мин
Краткое содержание статьи (для тех кто знаком с boost::mpl), typename опущены для ясности:
Под хабракатом есть немного пояснений :)
a = b; ==> typedef b a;
f(x) ==> f<x>::type
f(x) { return x*; } ==> template<typename x> struct x { typedef x* type; };
f()(x) ==> f::apply<x>::type
a[x] ==> mpl::at<a, x>::type
(x ? y : z) ==> mpl::if_<x, y, z>::type
switch (if_<x, y, z>) ==> *Уфф*, общая (default) и частичные специализации
{
case if_<bool_<false>, y, z>: return y;
default: return z;
}
Под хабракатом есть немного пояснений :)
