mpl::if_

コンパイル時if文

mpl::if_<条件, 真のときの型, 偽のときの型>::type

namespace shand { namespace mpl {

// if_c
template <bool Cond, class Then, class Else>
struct if_c;

template <class Then, class Else>
struct if_c<true, Then, Else> {
    typedef Then type;
};

template <class Then, class Else>
struct if_c<false, Then, Else> {
    typedef Else type;
};


// if_
template <class Cond, class Then, class Else>
struct if_ {
    typedef typename if_c<Cond::value, Then, Else>::type type;
};
#include <iostream>
#include <shand/type_traits.hpp>
#include <shand/mpl/if.hpp>

using namespace std;
using namespace shand;
using namespace shand::mpl;

int main()
{
    if_<is_integral<int>, int, char>::type value; // intが整数型ならint, intが整数型じゃなかったらchar

    cout << typeid(value).name() << endl;

    return 0;
}


ライブラリまとめ