ある値をn回繰り返したシーケンスを作る、Haskellにある関数replicate。これをBoost.Fusionで作るとしたらこうなるでしょう、ということで書いてみました。Boost.Fusionには、boost::arrayをFusion Sequenceと見なす機構があるので、それを使ってるだけです。
#include <iostream> #include <boost/fusion/include/vector.hpp> #include <boost/fusion/include/for_each.hpp> #include <boost/phoenix.hpp> #include <boost/array.hpp> #include <boost/fusion/include/boost_array.hpp> namespace result_of { template <class T, int N> struct replicate { typedef boost::array<T, N> type; }; } template <int N, class T> typename result_of::replicate<T, N>::type replicate(const T& x) { typedef typename result_of::replicate<T, N>::type result_type; result_type result; result.fill(x); return result; } int main() { namespace fusion = boost::fusion; using namespace boost::phoenix::arg_names; fusion::vector<int, int, int> v(replicate<3>(1)); fusion::for_each(v, std::cout << _1 << std::endl); }
1 1 1
他に考えられる方法としては、fusion::vectorにn回push_backするくらいですかね…