BOOST_PP で、範囲の初期化
ふと、思いついたので書いてみた。
mpl::range_c や、boost::irange とかそんな感じ。
こういうのは、プリプロセッサが楽ですね。
まぁ特にプリプロセッサで書く意味もない気がしますが。
[ソース]
#include <boost/preprocessor/repeat_from_to.hpp> #define INITIALIZER_RANGE_DECL(z, n, text) n, #define INITIALIZER_RANGE_(first, last) { \ BOOST_PP_REPEAT_FROM_TO(first, last, INITIALIZER_RANGE_DECL, ~) \ } #define initializer_range INITIALIZER_RANGE_ #include <boost/range/algorithm/for_each.hpp> #include <boost/lambda/lambda.hpp> #include <iostream> #include <vector> #include <initializer_list> int main(){ int array[] = initializer_range(0, 10); boost::for_each(array, std::cout << boost::lambda::_1 << ","); // C++0x の initializer_list に対応していれば std::vector<int> v = initializer_range(10, 20); for(auto n : v){ std::cout << n << ","; } return 0; }
[出力]
0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,
[boost]
- ver 1.47.0 beta1