VC6 Tips / C++での独自のnew deleteの作り方テクニック

C++でnew deleteを自作する時に既存のnew deleteと共存させたい事がある。
その時の解決方法としていくつか方法がある。

  1. クラス毎にnew deleteを書く
  2. 新たにnamespaceを作ってそこに新しいnew deleteを宣言
  3. 独自の引数を加えたnew deleteを宣言
1. は面倒すぎるので論外として・・・
2. は私も最初試した事があるがいちいちnew deleteの為に新しいネームスペースにoperatorを書くのは面倒 ソースコード的にスマートではない。new deleteとして定義させる意味が無い。そしてnamespace外から使用しようとするとコンパイラから怒られる事がある。

ということで今回は3.を紹介する。

独自の構造体を用意してそれをnew deleteの引数にするといった方法だ。
この方法を発見した当時は浮かれていた。(伏線)
続きを読む

続きを読む

対話型パーサージェネレーターがあればパーサー、字句解析は容易になるかな?

http://d.hatena.ne.jp/studiokingyo/20070222
にて紹介したKlick&Playというソフトの当時としては画期的だった点としてイベントが起きたらどうするかという事をソフト側が随時知らせてくれる所があった。それによってゲームの動作を随時 定義できる所が便利だった。
しかし、実際はどうでも良い事までも知らせてくる事が多々あったのでこの方法でゲームを製作する事はあまり無かったが・・・。


それから思いついたのだが、BNFでパーサーを定義してソース出力してその後、動作設定となるわけだけどこの動作設定の所をど対話式にすれば結構、パーサーの動作の状態遷移を頭に入れつつ、動作設定ができるのでこれは便利だと思うのだが・・・。
言葉足らず・・・

Win32版QDBMのAPIのC++ラップ・・・

http://qdbm.sourceforge.net/spex-ja.html#depotapi
http://qdbm.sourceforge.net/spex-ja.html#curiaapi
http://qdbm.sourceforge.net/spex-ja.html#cabinapi
http://qdbm.sourceforge.net/spex-ja.html#villaapi
C++化・・・。
嗚呼、ライブラリ作りたがりアン・・・
完成したらこの日記にてNYSL配布予定・・・

VC6に対応したSTLもシリアライズ可能なライブラリは無いものかね?

VC6にも対応したSTLシリアライズ可能なライブラリを探していた。
確か、この話題数年前にもしたはず・・・。*1
と言う事で、こんなアナクロな話題が好きな人は私くらいしかいないであろうけれど・・・ちょっと調べてみた。
via http://www.nbrains.net/php/pukiwiki/index.php?link%BD%B8%2F%A5%E9%A5%A4%A5%D6%A5%E9%A5%EA%B7%CF%2FC%2B%2B#Serializing
libs11n 1.2.x
http://s11n.net/s11n/1.2/
licenseはpublic domain

With the exception of the (optional) plugins support, the library uses only ISO-standard C++ constructs, meaning the code is portable to arbitrary modern C++ platforms. That said, it requires a compiler with excellent templates support, including partial template specialization. GCC 3.2+ are believed to be adequate, as is MSVC 2003+.

ダメだこりゃ・・・


xstream
http://xstream.sourceforge.net/

I am releasing this code under LGPL, so that you can use it on any project not only GPL projects. I would appreciate to know of any use this library is given.

これもライセンスが好みではない・・・


赤紫蘇2
http://akaxiso.sourceforge.jp/
licenseはBSDらしい。
これは昔からちょくちょくいじっている。
だが、VC6+STLPortの構成にすると多数の直すところが必要なのだ・・・。
そのパッチを密かに次期のDKUTにぶちこもうと画策中。
だが、未だに本格的に使用していない。なので内部がどのような構造でどのように動いているのかも実はよくわかっていない。
一部にVC6では使えない機能があるような覚えがあった・・・。


boost serialize
http://www.boost.org/libs/serialization/doc/index.html
boost::serialization?ライブラリでしたっけ?
実はVC6に対応していない。
昔、VC6に対応させようと奮闘した覚えがあるが、やはりテンプレート面の事がありVC6に対応させる事を断念した覚えがある。


さて、本末転倒菜ことを言おう
.NET Framework

C++のヘッダファイルのincludeで循環参照

かなり大規模なライブラリを作っていると循環参照よくやってしまうのですよ。
それを指摘してくれるツール欲しかったり・・・
というか、そういう設計にするなって話だと思うのですが・・・。

STLSoft体験記 part1

STLSoft(http://stlsoft.org)をVC6で使ってみた・・・。
なんかコンパイルできないんですけど・・・ STLPortで・・・。

As of this release, the supported compilers are Borland C/C++ (versions 5.5.1, 5.6 & 5.6.4) Comeau C++, (version 4.3.0.1 and 4.3.3) Digital Mars C/C++ (versions 8.26 and above) GNU C/C++ (versions 2.95 - 3.4) Intel C/C++ (versions 6.0, 7.0, 7.1 & 8.0) Metrowerks Code Warrior (versions 7.0 and 8.0) Microsoft Visual C/C++ (versions 4.2, 5.0, 6.0, 7.0, 7.1 & 8.0) Watcom C/C++ (versions 1.2 and 1.3)

というのは嘘なんですか!!?


いや、嘘じゃないらしい・・・
STLPortを使っていると上手くコンパイルしてくれない・・・ 所がある。*1
sampleはSTLPortを使っていてもコンパイルしてくれる。
一抹の不安の覚えつつももう少しテストしてみる。

*1:unit_test等・・・VC6標準のbrokenなSTLに設定しなおしたら上手く通った。

ストリームライブラリを製作するにあたって

buffer バッファ 
http://e-words.jp/w/E38390E38383E38395E382A1.html
より
有限なメモリブロック
一時的な領域


heap ヒープ
http://e-words.jp/w/E38392E383BCE38397.html
より
OSから渡される有限なメモリブロック


stream ストリーム
http://tinyurl.com/2yyqoz
より
入出力の抽象的な概念
write read seek tell がある。
抽象的には無限の領域だが具体的には有限の領域。


と・・・言う事で2−3年程前からストリームライブラリを組んできたのだが、
関連:http://d.hatena.ne.jp/studiokingyo/20041005#p1
どうも仕様が確定しないのでメモリ領域の概念を調べてみた。

今の時代.NET Framework全盛なんだからWindowsプログラミングするなら.NET FrameworkのStream系やSTLSoft系を使えばよいかと思った。

が・・・せっかくWindows95の事も考えてがんばって組んだライブラリなのだから最後まで組みたいと思うのだが・・・STLSoftを見てから決める事にする。
native C++で使えるiostream以外の汎用ストリームライブラリの存在を知らないので未だに必要と思うのだ。

todo memo
ポリシー
Buffered バッファを使用する

種類
MemoryStream メモリストリーム
FileStream ファイルストリーム
NetworkStream ネットワークストリーム
SerializeStream シリアライズ用ストリーム
 Endian エンディアン変換