ostream_joiner
こんな便利なものがあったとは...。
#include<boost/range/algorithm_ext/iota.hpp> #include<boost/range/algorithm/copy.hpp> #include<array> #include<experimental/iterator> #include<iostream> int main() { std::array<int,5> ar; boost::iota(ar,0); boost::copy(ar,std::experimental::make_ostream_joiner(std::cout,",")); // output:0,1,2,3,4 }
これがあれば、私が製作したmake_elements_stringの殆どの内部インプリメントを任せる事ができる。
#include<boost/range/algorithm_ext/iota.hpp> #include<boost/range/algorithm/copy.hpp> #include<utility> #include<experimental/iterator> #include<sstream> #include<array> template<class Container,char _delimiter=' '> constexpr std::string make_elements_string(Container&& c) { std::stringstream ss; boost::copy(std::forward<Container>(c),std::experimental::make_ostream_joiner(ss,_delimiter)); return ss.str(); } int main() { std::array<int,5> ar; boost::iota(ar,0); auto str=make_elements_string(std::move(ar)); }
これは...どうにかsrookライブラリにも取り入れたいところだが、experimental namespace内にあるので、その間はまだこの機能に依存したくもない気がしている。
追記
結局、マクロで取り敢えず、最低限の対応をしてみる事とした。
make elements string · falgon/SrookCppLibraries@31fa611 · GitHub