Sprout で遊んでみた
今や知らない人はいない空前絶後な超変態ライブラリ、Sprout をちょっと使ってみました。
とりあえず、簡単に itoa の実装でも。
ソースは下記の github にあります。
[ソース]
#define SPROUT_CONFIG_SUPPORT_TEMPORARY_CONTAINER_ITERATION #include <sprout/string.hpp> #include <sprout/operation.hpp> template<typename Char> constexpr sprout::basic_string<Char, 1> to_string(Char c){ return sprout::push_front(sprout::to_string(""), c); } template<typename T, typename Result = sprout::string_t<16>::type> constexpr Result itoa_impl(T n){ return n <= 10 ? sprout::realign_to<Result>(::to_string(char('0' + n))) : sprout::realign_to<Result>(itoa_impl(n/10) + ::to_string(char('0' + n%10))); } template<typename T, typename Result = sprout::string_t<16>::type> constexpr Result itoa(T n){ return n < 0 ? sprout::realign_to<Result>(("-" + itoa_impl(-n))) : sprout::realign_to<Result>(itoa_impl(n)); } int main(){ static_assert(itoa(12) == sprout::to_string("12"), ""); static_assert(itoa(3980213) == sprout::to_string("3980213"), ""); static_assert(itoa(-42) == sprout::to_string("-42"), ""); return 0; }
おー以前、自前で書きましたけど、Sprout を使用すると楽チンですね。
しかし、ただでさえ gcc のエラー出力に慣れてないのに、他人の書いた constexpr なエラーとか読んでいるとハゲそうです。
もっとエラーを見やすくしたい(Vim 的な意味で。
さて、Sprout で遊んでいたら Boost Advent がまだ真っ白ですよ。
これから書きます…。