閑古鳥

オールドプログラマの日記。プログラミングとか病気(透析)の話とか。

2008-09-01から1ヶ月間の記事一覧

boost::filter_iteratorは便利だけど書くのがめんどい

boost::make_filter_iteratorとか毎回書くのが面倒なので、省略したい。ということで適当に関数を作ってみる。 template<class Pred, class T, class F> void filterd_foreach(T begin, T end, F f) { std::for_each( boost::make_filter_iterator<Pred>(begin, end), boost::make_filter_iterator<Pred></pred></pred></class>…

int* array; みたいなのを Boost.Range で扱いたい。

C++

ラップするしかないのだろうか。 #include <iostream> #include <algorithm> #include <boost/range.hpp> template<class T> class Array { size_t m_size; T* m_ptr; public: Array(T* ptr, size_t n) : m_ptr(ptr), m_size(n) {} typedef T* iterator; typedef T const* const_iterator; iterator begin() </class></boost/range.hpp></algorithm></iostream>…

typename

C++

boost::range_iteraotr<>::typeを使うとコンパイルが通らない。たとえば以下のprint関数。letsboost::range悩んだ末Boost.Rangeのドキュメントを読んだところtypenameが必要らしい。 template<typename Range> void print( Range& r ) { typename boost::range_iterator<Range>::typ</range></typename>…

More C++ Idioms

C++

More C++ Idiomsいつの間にか日本語に訳されていた。ブクマ見ると今年の四月にはあったらしい。知らなかった……。

Boost.Accumulatorsを拡張する

Boost 1.36.0 から追加された Boost.Accumulators。統計関数がいろいろあるのですが、標準偏差がないっぽいなぁということで、作ってみました。拡張方法はドキュメントに書いてあるようなのですが読んでもよくわからなかったのでソース読みつつ適当にやって…