c++

mmap クラス

Boostの正規表現クラスを使う - bkブログ の記事を見て、こりゃいいやと。 class MemoryMappedFile : private Ash::Nonconstructible , private Ash::Noncopyable , private Ash::Nonassignable { int mFileDesc; const char* mpFirst; std::size_t mByteCou…

実況

IsIteratorCategory::value が falseになるってなんで? IteratorCategoryWithTraversal クラステンプレートの第1引数か。 FacadeIteratorCategoryImpl クラステンプレートの引数から導出した IteratorFacadeDefaultCategory::Type が Category になってる…

boost::iterator_adaptor

強力。こりゃいいわという事でヘッダを覗く。loki でも実現できるなーと思ったり。

loki 0.1.6

Andrei ぜんぜん commit してねーな。

loki::Functor and boost::bind

loki::Functor に boost::bind を食わせる事ができる。はず… struct Point { int x, y; Point(int ax, int ay) : x(ax), y(ay) {} void Add(const Point& rhs) { x += rhs.x; y += rhs.y; } }; Point pt(4, 5); loki::Functor<void, LOKI_TYPELIST_2<Point&, const Point&> adder = boost::bind(&Point::A</void,>…

Command/State pattern, Functor/Variant

4つどもえの戦い。それぞれのパーツはいい感じで出来上がってると思われ。 Command pattern ... generic な実装はあまり意味が無い事がわかった State pattern ... これも同様 Functor ... MC++D 勉強がてら書いたのがあるので追加なし Variant ... boost や…

Command pattern

構成要素 Command クラス オペレーションを実行するためのインターフェイスを宣言する。 ConcreteCommand クラス(PasteCommand クラスとか) Receiver オブジェクトとアクションの間の継りを定義する Receiver オブジェクトに対して該当するオペレーションの…

clone alone

http://www.two-sdg.demon.co.uk/curbralan/papers/accu/CloneAlone.pdf なるほどねぇ。 template <typename Derived, typename Base> Cloner : public Base { public: virtual Base* Clone() const { return new Derived(static_cast<Derived&>(*this)); } }; class Rectangle : public Cloner<Rectangle, Graphic> { public:</rectangle,></derived&></typename>…

clone alone

http://www.two-sdg.demon.co.uk/curbralan/papers/accu/CloneAlone.pdf なるほどねぇ。

Command pattern

http://en.wikipedia.org/wiki/Command_pattern やっぱり、こういうスタイルの方がいいのかなぁ... namespace EditorCommand { class Base { public: virtual void Execute(TextEditor& target) = 0; virtual ~Base() { } }; /** Cut Command */ class Cut :…

command pattern

なんだかよくわからないけれど、いつもしっくりこないパターン。 例えば PowerPlant だとコマンドは LCommander で表現され、LCommander の派生クラスはコマンドチェーンに継れる。 コマンドチェーンはカレントを管理する。例えばウィンドウがフォーカスされ…

make null pointer

http://d.hatena.ne.jp/mb2sync/20070110#p1 なるほど template <typename T> inline T* make_null_pointer() { return 0; }</typename>

Observer pattern

こんなのどう? namespace Ravine { /** * Subject class */ template <class Host, class Param> class Subject { public: /** Observer class */ class Observer { public: virtual ~Observer() {} virtual void Notify(Param param) = 0; }; virtual ~Subject() {} virtual void Not</class>…

command さらにもういっちょ

I am copying this example from the other example I posted a day or two ago. Requirements are very simliliar... template <class T> class Method { public: typedef int (T::* MemFunPtr)(char* []); Method(MemFunPtr pMethod) : mpMethod(pMethod) { } int I</class>…

command もういっちょ

How about using a template? Something similar to the mem_fun() adapter. // Totally untested code follows template <class T> MemFunCommand : public Command { T* mpHost; void (T::* mpMemFun)(); public: explicit MemFunCommand(T* pHost, void (T::* pMem</class>…

command

Yes, it's possible, use map<string, boost::function<void()> >. void quit(); struct X { void set_visible(bool visible); }; X x; std::map< std::string, boost::function<void()> > commands; int main() { commands["quit"] = &quit; commands["show"] = boost::bind(&X::set_visible, &x, tr</void()></string,>…

split_vector

http://mailman.lyra.org/pipermail/scintilla-interest/2002-March/000903.html ランダムな挿入と削除に強い vector

不連続なメモリ

次に、container が保持しているメモリが不連続である場合、困るわけ。 キャッシュするっていう手もあるけれど、MBCS だとオーバーヘッドデカいよね。 const_iterator from = container.begin(); const_iterator to = find_first(from, container.end(), _T(…

生のアドレスが欲しい

find_first や regex は文字単位でのアクセスなのでイテレータじゃなきゃこまる。でも、その後の処理では生のポインタが欲しいのね。 const_iterator from = container.begin(); const_iterator to = find_first(from, container.end(), _T('\n')); ::TextOu…

wchar_t

VC はサロゲートペアを除いた UCS2。 gcc だと UCS4 だが -fshort_wchar すると UCS2(かな?)。

locale と facet

よくわからん。stream - locale - facet は全然理解していないな。

assert メッセージが日本語に

いつからだ!? glibc かな? LINGUAS の指定はないが…勝手に日本語喋らないでいただきたい。

コードサイズ

2つの vector を merge して 1つの vector を作るコードをリファクタリングして、2つのvectorを削除した。変りに size_t の変数を2つ用意した。行数もそれほど変らなかった。 でもコードサイズが 10K ぐらい増えた… merge を stable_partition & for_each に…

fat interface?

極論いっちゃうとコンテナとアルゴリズムは標準を使う。 コンテナに入れる要素とアルゴリズム用の関数オブジェクトをカリカリ書く。 というのが良いスタイルなのかなあ…コメントを貰ったのでちょっと追記。std::back_inserter は container に push_back を…

boost::bind

便利。メンバデータも bind 出来るのが良い。ちょっと気になる: simple な functor を独自に書くのに比べると inline 化が抑止されるかもしれない。 boost::bind に置き換えるとコードサイズが微妙に小さくなるケースがあったので。お題となるクラス class …

fat interface?

気付くとこんな感じの I/F を書いてる class Contents { struct Content { // データメンバがいっぱいあるって事を言いたいわけです int d1_; float d2_; bool d3_; // (*1) で push_back を oneliner したいがために ctor を定義する Content(int d1, float…

gdb で vector の要素をみる

メモ d:id:pyopyopyo:20061004#p1

boost::function

マクロだらけで何が書いてあるのか全然わからんぞ!

const 参照を定数値で初期化できる

const int& n = 999; cout << "n=" << n << endl;実行結果 n=999これ、何で出来るんだろう?裏があるのかな?

gstlfilt

STL Error Decryptor for C++ 難解なコンパイルエラーを少しでも軽減してくれる。実体は perl script。