cpp

lix:CharSequence

XML パーサを作りにあたって、細切れのstringオブジェクトを作るのを避けたかったので、 元々のXMLドキュメントはそのままにしておいてその中の文字位置と文字列長で文字列を占めるという戦略をとりたく、 そのために作ったクラスです。https://code.google.…

xml パーサを書いたのでそれについて

ちょっと特殊な環境下で xml をパースする必要があって、いろいろと xml パースライブラリを探したのですが、どれもちょっとづつ求めるものと違うところがありうまく行かず、自前で xml パーサを書く必要がありました。 その時のことを書いてみようかと思い…

SAFE_DELETE って安全でも何でもないよね。

誰が一番最初に作って広めたのかわからないんだけど、 #define SAFE_DELETE( p ) if(p) { delete (p); (p) = NULL; } っていうマクロ。そもそも NULL を delete してもなんの問題もないし、このマクロを通したからといって何が安全になるわけでもない。全て…

Named コンストラクタについて考える。

ごくアタリマエのことだったりするのかもしれないのですが、 コンストラクタの引数が多くなるとわかりづらくなるので、それを避けるためにコンストラクタとは別に static でインスタンスを生成して返す関数を作るっていうのがよくありますけど、 class Human…

設定ファイルからの読み込みをもうちょっと C++ っぽくしてみる。

前のエントリ設定ファイルから true か false を読み出す。 - meg_nakagamiの日記ですけど、これは C++ 的にはまだまだ甘いので、みんながある程度 C++ を詳しく知っている、もしくは向上心があって知らないことを学習の機会とみなしてくれる人であるという…

lix::Failable

cpp

lix::Succession が失敗したときにエラーコードを返す、というだけのものであるのに対して、何らかの値を取得し、失敗時はエラーコードを返す、という場合に使用することを想定したクラステンプレートです。 // 何らかの文字列を引数で受けた string に格納…

lix::Succession

cpp

試しに公開してみた https://code.google.com/p/lix-failable/source/browse/ こいつですが、例えばこういう関数を作るとして、 // 普通は失敗しない何かをする。失敗時は false を返す、失敗理由は(Win32の)GetLastError で。 BOOL DoSomething( int x); こ…

スレッドローカル

cpp

こうか? #if __cplusplus > 199711L #define THREAD_LOCAL thread_local #else #if defined( _MSC_VER ) #define THREAD_LOCAL __declspec(thread) #else #define THREAD_LOCAL __thread #endif THREAD_LOCAL int x = 42;

typesafe な sprintf

cpp

boost::format を使えばいいんだけど、operator%がなんとなく嫌だったり、フォーマット不能な場合にデフォルトで例外投げるのが嫌だったりするので、そのへんを補正してsprintf感覚で使えるようにしたマクロ。引数10個まで行ける。 #include <boost/preprocessor.hpp> #include <boost/format.hpp> #inc</boost/format.hpp></boost/preprocessor.hpp>…