[ create a new paste ] login | about

Link: http://codepad.org/ZETPia3N    [ raw code | fork ]

C++, pasted on Dec 3:
#include <tuple>
#include <iostream>
#include <boost/preprocessor.hpp>

#define CREATE_NAMED_TUPLE(name, fields) \
    namespace name { \
        enum { \
            BOOST_PP_SEQ_FOR_EACH_I(NAMED_TUPLE_FE_COMMA, 1, fields) \
        }; \
        typedef std::tuple<BOOST_PP_SEQ_FOR_EACH_I(NAMED_TUPLE_FE_COMMA, 0, fields)> type; \
    }

#define NAMED_TUPLE_FE_COMMA(r, tuple_elem, idx, elem) \
    BOOST_PP_COMMA_IF(idx) BOOST_PP_TUPLE_ELEM(2, tuple_elem, elem)

CREATE_NAMED_TUPLE(
    my_fancy_tuple,
    ((int,   foo))
    ((int,   bar))
    ((float, baz))
)

int main() {
    auto i = my_fancy_tuple::type(1, 2, 3.2f);
    std::cout << std::get<my_fancy_tuple::foo>(i) << " " << std::get<my_fancy_tuple::bar>(i) << " " << std::get<my_fancy_tuple::baz>(i) << "\n";
    return 0;
}


Create a new paste based on this one


Comments: