BOOST_PP_ENUM_SHIFTED(n, def, data)
BOOST_PP_ENUM_SHIFTED(n, def, data) は、
def(z, data, 1), def(z, data, 2) ... def(z, data, n-1)
の様に指定した回数分だけマクロの展開を行います。
#include <iostream> #include <boost/preprocessor.hpp> #include <boost/range/algorithm/for_each.hpp> #include <boost/fusion/include/vector.hpp> #include <boost/assign.hpp> #define N(z, n, type) n #define TYPE(z, n, type) type int main(){ using namespace boost::assign; std::vector<int> array; array += BOOST_PP_ENUM_SHIFTED(6, N, int); // 1, 2, 3, 4, 5 に展開 boost::for_each(array, [](int n){ std::cout << n << std::endl; }); boost::fusion::vector< BOOST_PP_ENUM_SHIFTED(6, TYPE, int) // int, int, int, int, int > int_6_vector; return 0; }
マクロでループするっていう発想が斬新過ぎる。
[boost]
ver 1.44.0
[参照]
http://d.hatena.ne.jp/DigitalGhost/20091213/1260732009