閑古鳥

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

C++

boost::shared_ptr が素敵な件 (2)

こうか。 #include <iostream> #include <algorithm> #include <vector> #include <boost/shared_ptr.hpp> #include <boost/bind.hpp> using namespace std; struct base { virtual void print() = 0; }; struct hoge : public base { virtual void print() { cout << "hoge" << endl; } }; struct hige : public base { virtua…</boost/bind.hpp></boost/shared_ptr.hpp></vector></algorithm></iostream>

配列中に最も小さな値が複数存在する時の min_element の挙動

規格では最初に見つかった反復子 (Iterator) が返るようになっているため、下記のようなコードには悲しい結果が待っている。 #include #include int main(int, char*) { double data = { 5, 4, 3, 2, 1, 1 }; double* last = data + sizeof(data) / sizeof(d…

boost::shared_ptr が素敵な件

物凄い今更ですが、まともに使ったことってあんまりなかったりするので……。どうも生ポインタと比較した時のコストが気になってしまうんですが、まあたまには富豪的にいってみようということで使ってみました。 #include #include #include #include #include…

XPath が使いたいなあ

XML 周りの処理が面倒なので XPath が使えたら、と一瞬思ったけれど BCB で普通にやる分にはできそうにないので諦める。 Xalan を入れるとか、やりようはあるかもしれないけれどかえって面倒なことになりそうだし。 VC なら MSXML があるので一応使えるんで…

TStringGrid.Assign は呼ぶと死にます

VCL で複数個のコントロールの見栄えを統一したくなったのでひとつだけデザインしておいて後は実行時に Assign メソッド呼べばいいのかな、と思ってやってみたら EConvertError 例外が飛んできて憤死。 Assign でデザインのコピーはできないのか……。面倒だけ…

スターライト・デバッガ

404 Not Found の最後に紹介されているサンプルコードの straight_to_debugger が starright_to_debugger に見えて、なんだこの名前は、とか思ってしまった……。ていうかスターライトだったら starlite じゃないかとか後から気付いて残念な思いをしました。

もうむり

void f(int* ptr) { ptr = new int[3]; } int main(int, char*[]) { int* ptr = 0; f(ptr); std::cout .....orz

もうだめぽ...

if(::strncmp(hoge, "hoge?", 5)) { //... } みたいなコード書いて「あれー、動かないなー?」とかやってた。死にたい。帰るべきですか、もう……。

コーディング規約

最新の規約をゲット。イニシャルは確定らしい。ま、別にいいか。自分の本業の方に影響しなければ。慣れれば気にならなくなるでしょうし。ハンガリアン記法ってローカル変数にも適用されるのかな。最近スコープの短いローカル変数は大抵 1 文字にしてしまって…

コーディング規約

本当にクラス名のプリフィクスにイニシャルを付けるんだろうか……。プリフィクスだけで 5 文字って、一般的なの? 無駄じゃね? そもそも同じイニシャルの人がいたらどうなるの? イニシャルの前に機能名を表した文字も 1 文字付けるっていうけれど、その文字が…

#include で楽をしよう

こないだ (id:wata_d:20051222) の 実装を別ファイルに書いておいて、必要な箇所で include というのをやってた。 DLL のエクスポートする関数で、実装がまったく同じものを別ファイルに切り出して、それぞれの DLL の適当なところで include 。だいぶすっき…

MSXML4 は VC6 では動かない?

msxml4.dll を import してほげほげしていたら、 IXMLDOMNodePtr.nodeType を使うところでコンパイルに失敗してしまう。自動生成される msxml4.tli の中身でこけているので、 VC がいけないのかなとも思いつつ、少し調べても解決方法が解らなかったのでとり…

BCB で MSXML

使うことは使えるようなのだけれど、でも使えない。 char* を BSTR に変換する際に ConvertStringToBSTR 関数を使うのですが、この関数のある comsupp.lib が BCB にはないっぽいのでリンクができない。comdef.h を見たら以下のような分岐が。 #ifndef __BOR…

BOOST_ASSERT

BOOST_ENABLE_ASSERT_HANDLER マクロを定義して boost::assertion_failed の中で DebugBreak API 関数を呼ぶようにすると、そこそこ便利、かも。 boost::shared_ptr の中で落ちたときなどは abort されてしまうと原因突き止めるのが面倒なこともあるし。

dynamic_cast で実行時エラー (Access Violation)

C++

アプリケーションのテストをしていたら dynamic_cast を使っている箇所で Access Violation が。初めて遭遇する現象だったためか難しく考えすぎたりして原因を突き止めるのに無駄に時間をかけてしまった。原因は単に delete 済みのポインタに対して dymamic_…

同じ機能なのにインターフェイスがばらばら...

似ているけれど微妙に違う二種類のクラス扱うクラス (ややこしいな) の中で、いま扱っているクラスがどっちなのかいちいち調べて分岐している部分があって、これをひとつにまとめよう、と思ったけどどうも微妙な違いが微妙に邪魔して無理っぽくて落ち込む。…

オブジェクトのディープコピーを禁止する

C++

参照を取るはずが…… - *失 言 小 町* オブジェクトのコピーを禁止しているクラスであれば、コピーコンストラクタと代入演算子をプライベートにすることで、ディープコピーをコンパイル時点で弾いてしまう手もあると思います。 class CSomeImage { public: CS…

WTL8

面倒くさくなったのでスクリプトが要求するレジストリを自分で追加しました。\\HKLM\\Software\\Microsoft\\VisualStudio\\8.0\\Setup\\VC\\ProductDir上記のレジストリを作成し、値には文字列で VC8 のインストールフォルダを設定すれば WTL に同梱されてい…

VC8 Express Edition

インストールしてみた。で、 WTL8 のインストールをしようとすると失敗する。 WTL のインストーラ、というかスクリプトが見に行っているレジストリが存在していないらしいけれど、どうしたらいいんだろう。ゲームしながらソース読んでいると台詞が飛びとびに…

std::deque の Iterator は Random Access Iterator でしょー!!

C++

std::deque を std::for_each に渡したら bcc から警告が。 std::for_each に渡す Iterator は Input Iterator じゃなきゃ駄目だ、と。いやそんなん知ってるし!納得いかんなー、と思って検索してみると、どうもコンパイラのバグっぽい。 http://qc.borland.c…

C++ Builder で、関数 (std::remove) を認識できなくなる

C++ Builder というより、 C++ Builder 付属の STLport の問題、だそうですが。std::remove(hoge.begin(), hoge.end(), hage)上記のようなコードが突然通らなくなって一瞬はまった。過去に同じ問題に引っかかったことを思い出して、同じ方法で解決しましたが…

Borland C++ Builder で「警告をエラーとして扱う」を実現する

VC とかには警告 (warning) をエラーとみなし、 1 つでも警告のあるプログラムのコンパイルができなくなるようなオプションがありますが、これ、 C++ Builder でも同様のことができるようです。ヘルプを眺めていたら発見しました。コマンドラインオプション…

初めてまともにマクロを使った

C++ でマクロを使う機会なんてそうそうないので、これまで自分でマクロを定義して使うことは無かったのですが、今日初めて使ってみました。一部が違うだけの、ほとんど内容は同じような関数が山のようにあって、それを定義するために。本当はそういう関数の…

IP Helper Functions

PC に刺さっている LAN カードの MAC アドレスとか、そのへんの情報が必要になったので、検索してみたところ IP Helper Functions というものがあるらしい。 MSDN Library MSDN のドキュメントはまだ英語版しかないようだけれど、リファレンスくらいなら英語…

VCL のクラス (TObject) から派生したクラスは、多重継承することができない

上のコードを実装している最中に、具象クラスを定義するところでコンパイルエラーになってはまったのでついでにメモ。E2246 class は、抽象およびパブリックの、データを持たない単一の継承クラスの階層ではない というエラー。意味が分からない。ヘルプによ…

Capsule パターン (3)

結局、さっきの案で実装しました。 GetCapsule メンバ関数はマクロとして define しておいてそれを記述する形にしてみた。 Loki の Visitor のパクり。結局あれを無くす方法も思いついていない以上、この良い解法も簡単には出ないだろう、ということで。今の…

Capsule パターン (2)

現状こんな感じ。 // Base.h struct IBase { virtual ~Base() {} }; struct IHoge { virtual void hoge() = 0; }; // Impl.h struct BaseImpl : public IBase, public IHoge { virtual void hoge() { /* ... */ } }; // Client.cpp #include "Base.h" void m…

Capsule パターン

巡りめぐっていま頭の中にある構想を実現するには Capsule パターンがいいのではないか、というところまでたどり着きました。 しかし問題は、 Capsule 型の変数 (ポインタ) を返す f() をどこに置くかだなあ。

boost.ntree

boost の Sandbox を眺めていたら tree フォルダが。 ntree というライブラリがありました。 n 分探索木というやつでしょうか。 http://cvs.sourceforge.net/viewcvs.py/boost-sandbox/boost-sandbox/boost/tree/ いずれ boost に入るという認識でいいのかな…

tree.hh

tree.hh: an STL-like C++ tree class 木構造を表現するためのライブラリ。 STL ライク。なんとなく、仕事で使えるかなあと一瞬思ったけれど、 GPL だから出番があっても使えないなあ。 boost にあればいいのに。