Boost

rangeをより小さな部分に分割するadaptor

rangeを一定サイズの部分rangeに分割するadaptorを書いてみました。こんな感じに使えます。 #include <iostream> #include <boost/lambda/lambda.hpp> #include <boost/range/algorithm/for_each.hpp> #include <boost/range/as_literal.hpp> #include "chunked.hpp" int main() { boost::for_each( // 文字列を4文字ごとに分割する boost::as_literal("Hello, wor</boost/range/as_literal.hpp></boost/range/algorithm/for_each.hpp></boost/lambda/lambda.hpp></iostream>…

Boost.PPでmake_uniqueを実装してみた

(std|boost)::shared_ptrには、それを生成するためのヘルパ関数make_sharedがありますが、std::unique_ptrにはそれに相当するものがありません。そこで、Boost.PPを使って簡単に実装してみました。 make_unique_nvt.hpp #ifndef BOOST_PP_IS_ITERATING #ifnd…

Boost.MPLでBrainfuckインタプリタを実装してみた

やってみました。まず構文木を作っているのでとても長いです。 ソース /* Example: typedef brainfuck::interpret< mpl::string<'+++[', '>,-.', '<-]'>, // Source : +++[>,-.<-] mpl::string<'IBM'> // Input : IBM >::type output; // Output : HAL BOOST…

Boost.MPLでエラトステネスの篩を実装してみた

『C++テンプレートメタプログラミング』を読み始めたので、Boost.MPLでエラトステネスの篩を実装してみました。 コード Pythonで書くところの def sieve(ns): return [ns[0]] + sieve([n for n in ns if n % ns[0]]) if ns else [] を、そのまま(?)C++のコー…