パソコン・メモメモ備忘録

気の向くままパソコン関係等で気になることを書き記す。時々更新!

C++

1.#IND00, -1.#IND00 再び

以前、1.#IND00, -1.#IND00 について記事を書いた。今日、そこに書いた方法をやってみたら上手くいかず。以前なんで上手くいったんだろう? もしかして x64 だと挙動が違うのだろうか。それで、調べてみたところ、これら無限大については !_finite(x) で判別…

ATL + OpenGL

MSDN のサンプル。 codeproject.com のページ これらのサンプル通りに動かすには、コントロールのコンストラクタで m_bWindowOnly = true; になっていないといけないようだ。そうしないと、OnCreate(), OnDestroy() が呼ばれない。ウィザードのオプションで…

ActiveX コントロールでのマウスキャプチャ

InternetExplorer などの ActiveX コンテナの中で、ActiveX コントロール自体が個別の Window を持たずに埋め込まれている場合に、マウスをキャプチャ(SetCapture()) するにはどうすればいいか。MFC だと、MSDN のドキュメントに書かれているのだが、ATL で…

無限大/-無限大の判別

計算中に何かの問題で、値が 無限大とか、-無限大になった場合(VisualC++ だと 1.#IND000 や -1.#IND00 と出る)、それを判別したい時がある。方法はいろいろあると思うが、ひとつの方法として、

テンプレート関数の明示的な実体化

実体化は、インスタンシエーションとかインスタンス化とかとも呼ばれたりする。テンプレートクラスのメソッドや普通のクラスのテンプレートメソッドの宣言を .h、実装を .cpp ファイルに分けて書いたりすると、ちょっと困ったことが起こる場合がある。そのメ…

boost::lambda を使ってみた

boost の中でも変態度高めの lambda を使ってみた。いまどきの PC ならそんなにコンパイルが遅くはならないかな、と。

関数内関数

C++ では、直接は関数内関数定義は使えないが、関数内クラス宣言を使うと近いものができる。

VC++2005 iterator と ポインタ と &*

VC++2005 になって、前バージョンより、メモリリークとかワイルドポインタに厳しくなっているように思える。特に、XYZ.begin() のポインタを取ろうとして &*XYZ.begin() とかやると、場合によっては例外が飛ぶ。XYZ が例えば std::vector とした場合、長さが…