C++

続・続・ interface と実装を分離する

長いんだけど http://d.hatena.ne.jp/janus_wel/20100608/1275989229 の最後で言ってた interface の管理用 class の実装例を書いてみた。長くなったついでに複数の似たような object を管理できるようにもしてみた。以下の code では id という整数値を指定…

続・ interface と実装を分離する

http://d.hatena.ne.jp/janus_wel/20100608/1275986820 で一応 user に実装の詳細を見せなくすることができたわけだけど user 側で delete 文を使う必要が出てきてしまったわけだ。というわけでそこらへんを何とかしようというのが目的。でまぁ早速なんだけ…

interface と実装を分離する

例えば何らかの domain に特化した class なり function なりを詰め込んだ library ( static / dynamic 問わず ) もしくは obj やら o やらとそれを使うための interface である header file 、というようなものを作るとき、 C++ で素直にやるなら継承を使っ…

文字列が数値を表わすか check する

boost::regex あたりの正規表現 library をつかえというので FA 。なんだけど自分で書いてみた。 http://github.com/januswel/cpplib/blob/master/header/strcheck.hpp http://github.com/januswel/cpplib/blob/master/sample/strcheck/main.cpp 一応 locale…

bmp

Windows Bitmap の header をアレコレするアレ。 24bit に限定。 32bit も扱えるようにしてもいいとは思うんだけどめんどくさい。あんまり見ないし。あと 256 色とか時代的にめんどくさい気がするのでこれだけで問題ない気もする。 http://github.com/janusw…

wav file の data を扱う

もう更新する気はないとかいっといて ( http://d.hatena.ne.jp/janus_wel/20100530/1275206953 ) さっそくうそついた感じなんだけどいわゆる sampling data を扱う class を定義して istream_iterator や ostream_iterator で使えてうれしい形にした。 http:…

stdint.h in VS10

VS10 で stdint.h が使えるようになってることに今更気付いた。以下の code が compile 通るようになってる。 http://github.com/januswel/cpplib/blob/master/header/elapsed.hpp http://github.com/januswel/cpplib/blob/master/sample/elapsed/main.cpp V…

wav file

なんかすごい久しぶりな気がする。というのはおいといて wav file ( RIFF WAV linear PCM ) の header を読み書きする C++ header を書いてみた。 fmt sub-chunk の拡張部分とか考え気すらないので bug とかなければこれで fix 。 http://github.com/januswe…

C++ の program framework

http://d.hatena.ne.jp/janus_wel/20100522/1274515252 で言ってた file template の分割をやったら Makefile を書かざるを得なくなって書いたら書いたでアレ ? これ copy & rename & replace すれば量産できるんじゃね ? という流れで作ってみた。 http://g…

main.hpp やめました

http://d.hatena.ne.jp/janus_wel/20100508/1273332573 で言ってたアレ、やめた。というのも仕分け対象というよりは援助・施策対象になりそうなところの構成員に「意味のないものを書くな」と direct に諭されたのでコレ使いながらいろいろ書いたり詰めたり…

STL だけで Perl の grep

sequence_container ( http://www.cplusplus.com/reference/stl/ の表参照 ) を出力先とすると下の code が多分素直な書き方。 sequence_container.resize(std::count_if(src.begin(), src.end(), pred)); std::remove_copy_if( src.begin(), src.end(), seq…

code template for cpp

code のひな形という意味での template 。 http://github.com/januswel/dotfiles/blob/master/vimfiles/template/-.cpp あーえーとうちは vim でアレコレしてるので filename だとか comment 内のよくわからないアレだとかは以下を参照で。 autotmpl.vim htt…

main.hpp

program を書く上で必要になりそうなものをまとめた header file 。 wmain.cpp のほうは内部の文字列処理をすべて wchar_t および std::wstring でやる場合。 http://github.com/januswel/cpplib/blob/master/header/main.hpp http://github.com/januswel/cp…

impltest

処理系の挙動を check するための code 群を cpplib repository につっこむことにした。 library じゃないんだけど形式知だしまぁ似たようなもんと言うことで一緒くたに。 std::bind2nd の check http://github.com/januswel/cpplib/blob/master/impltest/bi…

grep

sequence container を引数に取る関数を定義してしまったのでじゃあこれもという感じで。 http://github.com/januswel/cpplib/blob/master/header/algorithm.hpp http://github.com/januswel/cpplib/commit/ba15e77b2f0706e73cf30dd566b007a4292b1729 http:/…

algorithm と functional で

Visual Studio 2010 で reference な引数に std::bind2nd できるようになったのでうちの cpp library を と を使って書き直してみた。 http://github.com/januswel/cpplib/commit/5222ccf23ba3082b1ce44da90f9e93fa51d80765 http://github.com/januswel/cppl…

join, split

Perl や javascript でいうところの join と split を書いてみた。 http://github.com/januswel/cpplib/blob/master/header/typeconv.hpp http://github.com/januswel/cpplib/commit/e04a31543657f5e23c67ea4fbc4326a3ab093805 http://github.com/januswel/c…

Visual Studio 2010 Express

いつの間にかでてた -> http://www.microsoft.com/japan/msdn/vstudio/express/ 。とりあえず compiler だけ cmd.exe から使ってるんだけど vs9 で通らなかった以下の code がきちんと通るようになっていてちょっと感動した。 #include <algorithm> #include <functional> #include <iostream></iostream></functional></algorithm>…

pointer to overloaded function

最初どうするんだろうと思ったけど C では「関数の pointer 」型を宣言するのに戻り型と引数を指定していたし C++ compiler は signature でどの関数が呼ばれているかを判断しているわけなのでじゃあ signature を構成する引数と ( member function の場合 )…

pointer to member

念のためとかせっかくだからで全然意味が違ってきてしまうことに気付いたのでまとめ。ある class の member ( data member でも member function でもいい ) への pointer を取る場合、その関数の qualified-id ( global 名前空間を起点として名前空間や cla…

algorithm.hpp

ひょんなことから まわりの関数 ( http://www.cplusplus.com/reference/algorithm/ ) を使うようになってあー iterator という interface ですべて操作するわけかなるほどとか思ってたんだけど欲しいものがなかったので書いてみた。 http://github.com/janus…

getopt

C++ ぽく自分で書いてみた。 http://github.com/januswel/cpplib/blob/master/header/getopt.hpp http://github.com/januswel/cpplib/blob/master/sample/getopt/main.cpp けっこういい感じにはなったんだけど多分もう 2, 3 回 refactoring しそうな予感。

chain of responsibility

GoF design pattern で遊んでみよう第二弾 ( 第三弾なんだけど event は observer の変形なので実質 2 つめ ) 。あまり使い出がないと思いきや特定方面には思いっきり需要のある pattern でございます。 http://github.com/januswel/cpplib/blob/master/head…

event.hpp

いわゆる event driven なアレをアレするアレ。 observer pattern ( http://d.hatena.ne.jp/janus_wel/20100329/1269856344 ) の変形版、というほどのものでもなくて各 class や member の名前をそれっぽく変えて状態を保持する class ( observer pattern で…

C++ 基礎型一覧表

汎整数型って何を指してんだっけ ? というときに覗く表。 算術型 汎整数型 ( 整数型 ) 符号あり整数型 標準符号あり整数型 signed char short int int long int long long int 拡張符号あり整数型処理系定義 符号なし整数型標準符号なし整数型unsigned char …

observer pattern

GoF design pattern のアレ。 C++ でのわかりやすいまともな実装例が見つからなかったので自分で書いてみた。とりあえず wikipedia:Observer パターン や http://www.objectclub.jp/technicaldoc/pattern/observer を参考に名前はそのまま ( CamelCase な識…

enum にしょんぼり

id:faith_and_brave に C++0x の enum は基底型に汎整数型しか指定できないよ、と指摘されたので修正。ちょっと妄想の翼が暴走してしまったようで。ちなみに「はげます」 & 話術士禁止 play とか実はけっこうツライです、であってるかな ?ちょっと enum まわ…

hpp

そういや hpp って拡張子は C++ の header file て意味だよなと思って調べてみたら案外そうでもない意見もあってでもおれはせっかくだから C++ header file には hpp を選ぶぜ的なハナシ。既出意見はとりあえずわかりやすいとこで以下のみっつくらい ? 拡張…

global locale と finename

Windows で名前に ASCII characters じゃない文字を使っている file を扱う場合、 global locale を system の locale にしてやらないと意図通りの名前にならないというハナシ。 ja_JP.UTF-8 な locale を使っている andLinux だと global locale が C だろ…

mbstowcs, wcstombs

http://d.hatena.ne.jp/janus_wel/20100315/1268654296 の C 標準関数版。 // nwconv_c.hpp #ifndef NWCONV_C_HPP #define NWCONV_C_HPP #include <string> #include <vector> #include <cstdlib> #include "../../header/wexcept.hpp" #ifdef _MSC_VER # include <errno.h> #endif namespace u</errno.h></cstdlib></vector></string>…