C++의 또다른 매력 TMP
#include <iostream>
//TMP
template <bool cond, typename T1, typename T2> struct IF{};
template <typename T1, typename T2>
struct IF<false, T1, T2>{
typedef T2 type;
};
template <typename T1, typename T2>
struct IF<true, T1, T2>{
typedef T1 type;
};
template <typename T, typename U>
struct Typelist{
typedef T hd;
typedef U tl;
};
struct NullType{};
template<int n>
struct NUM{
enum {val=n};
};
template<typename expr1, typename expr2>
struct PLUS{
enum {val=expr1::val+expr2::val};
};
template<typename expr1, typename expr2>
struct MINUS{
enum {val=expr1::val-expr2::val};
};
template<typename expr1, typename expr2>
struct MULT{
enum {val=expr1::val*expr2::val};
};
template <typename exprlist>
struct MAX{
enum {val=IF<(exprlist::hd::val > MAX<typename exprlist::tl>::val),
typename exprlist::hd,
MAX<typename exprlist::tl> >::type::val};
};
template<>
struct MAX<NullType>{
enum {val=0};
};
int main(){
std::cout <<
PLUS<
NUM<10>,
MAX<
Typelist<
NUM<20>,
Typelist<NUM<10>, NullType >
>
>
>::val;
return 0;
}
사실은 프로그래밍 원리의 nML숙제를 TMP로 구현한것.