C++

boost 1.39.0 で入った Boost.Signals2 がよさげ

C++

先日リリースされたboost 1.39.0で新しく追加されたBoost.Signals2がいい感じです。すでにBoost.Signalsというものがありましたが、これはBoostのビルドが必要でした。しかしSignals2ではヘッダだけで事足ります。さらに、Signalsと比べてスレッドセーフとい…

画像処理ライブラリのパフォーマンス比較

C++

……っていうのがあればいいんですが、ちょっと探したところだと見当たりませんでした。品質比較なら結構あるんですけどね。というわけで、自分で少しずつ書き進めてます。モチベーションは、ImageMagickでGIFへの変換速度が異常に遅いこと。twitterのロゴ画像…

ライブラリ浦島太郎

C++

最新のSTLport(5.2.1)を拾ってきたらINSTALLの先頭にこんな記述が。 Starting with 5.0 the 'wrapper' mode is not supported anymore. You cannot use native compiler iostreams implementation with STLport STL (see doc/FAQ for explanations). Now y…

ImageMagickを使おうとしたけどやめた

C++

Direct3Dのバックバッファを数枚〜数十枚連結して保存したいなぁと思って、ImageMagickを使うことにしました。いろんなフォーマット保存できるといいよねってことで。単にバックバッファ保存ならD3DXSaveSurfaceToFileで一発なんですが、そうもいかないんで…

Google Code Jamが復活した!

C++

昨年は開催されずに(で合ってるよね?)、もう二度と無いのかなぁと思っていたGoogle Code Jamが復活したようです。やった!ICFPとかはあまり自分には縁が無いものだと思ってたので、Google Code Jamの復活はすごくうれしいです。システムは今までとガラリ…

コンストラクタでの例外を病的に嫌った結果がこれだよ!

C++

コンストラクタで例外を投げることが禁止されているわけではないことは承知ですが、割とこういうコードをよく書きます。 class Hoge; typedef boost::shared_ptr<Hoge> HogePtr; class Hoge { public: HogePtr create() { HogePtr p(new Hoge()); p->mSome.reset(n</hoge>…

C/C++プログラミングの禁じ手

ついったで自動変数に対するメモリ割り当てに関する話題を耳にしたので、そんな話がC MAGAZINEの特集にあったことを思い出しました。それで検索してみたんですが、廃刊の影響かcmagazine.jpが消滅してました。こういうときはwayback machine先生に聞いてみよ…

FlashのJSFL拡張DLLを書いたのでメモ

C++

誰か Flash IDE 用のファイルコピー DLL を C で書いて〜wというわけで、前々から気になってたC言語による拡張を書いてみました。割と簡単にできたので、手順をまとめておきます。環境はVisual Studio 2005で。 まず、右も左も分からない状態なので、サンプ…

意味も無く書く

とりあえずネタが無いなりに何か書かなければ。先日の Boost ビルドですが、ライブラリできたものの諸般の理由で boost::signal 使うのやめました。プロジェクトで使っているのが Boost 1.31.0 なんですが、これだと VC 2005 が認識されないためです。そんな…

boost::signal が使いたくなって

C++

ついに bjam とかやってしまった。まぁめどいってだけで逃避してるのもなんですし。とりあえず Boost 本みながらビルドの仕方を調べて、コマンドラインで bjam とだけ書けばヘルプが出るかな?と思ってえいっとやってみたら急にビルド始まってしまいました。…

名前空間、ディレクトリ構造

C++

前回書いた不具合は解消されたようです。なんだったんだろう。IDE を作る場合には多種類のデータを扱う必要があるわけで、それを何となく図にしてみました。世間で言う MVC もこれみたいなもんなんでしょうかね。これに対して名前空間(=ディレクトリ)をど…

スタティックライブラリにする理由

C++

色々悩んでやっぱり .lib RUSH にすることにしました。最後の最後にそれを後押しした理由は、実につまらないですが、ファイル名の重複問題です。Visual C++ で、特に何もしない限りは hoge.cpp は hoge.obj になりますが、これ、言い方変ですがグローバルな…

クルクル typedef

typedef T<A> T; 何か変な顔文字に見えますが、これって出来るのか……知らなかった。MSDN に下のようなことが書いてあるから問題ないはず。 typedef union REGS // OK: name REGS redeclared { // by typedef name with the struct wordregs x; // same meaning.</a>…

理想にはやや距離がある lazy initialization

すっかり lazy initialization に毒されて、そこらじゅうで活躍しているわけですが、C++ では const 制限に引っかかることがあり、大変残念です。以下サンプル。 class C { Window* window; public: Window* getWindow() { if (window == NULL) window = new…

ぬるぽキラー aka Lazy Initialization

Lazy Initializationは主にJavaの世界で使われる用語だと思うのですが、最近C++でこれが必要になってきました。この方法を最初に知ったのは、EclipseのVisual Editorを使ってたときです。本来、Lazy Initializationは「必要になるまでオブジェクトを生成しな…

剰余はってんというか、暗黙型キャスト基礎というか

C++

先日、-10%3は-1というのを書きましたが、これ、符号付の時しか成り立たないです(まぁ当然といえば当然ですけど)。左側の項が、何らかの式になっていて、その中に1つでも符号無しの値があると、暗黙でその項が符号無しになってしまいます。そして結果的に…

剰余キソノキソ

C++

10 % 3 = 1 10 % -3 = 1 -10 % 3 = -1 -10 % -3 = -1 君を忘れる事なかれ。Javaはどうだったかなぁ(ICPCのトライアルユースでやったけど、もう忘れた

C++

for文でまわす変数、iteratorならiXXX、数字ならnXXXという方針だったんですが、数字でも配列添え字indexのiという言い訳が通用するからiXXXでも許せるかなぁとか思ってみたり。なんだかどうでもいい話です。

const/not const

C++

void decade( int& result, const int& param ){ result = param * 10; } int a = 2; decade( a, a ); 昨日のinlineに続いて、こんなのができるのも考えてなかった…。まぁ昨日のとは違って、これはさっき思いついたやつなんですけど。シミュレーションなんか…

C++

なんだかしばらくinlineというキーワードを忘れていた…。正確には、ヘッダでクラスのメンバ関数を書くときに、クラス宣言内で書かずにその下のほうで書くあれです。どうもgetter/setter書くときに int getA( void ) const { return m_a; }; と間延びしてしま…

上のに補足。

C++

intrusive_ptrってあまり人気無いんですかね。Googleで検索してもほとんど出てこなかったり。もしかしてDirectXでintrusive_ptr使ってたりすると初心者?で、なんでそんなのを検索していたかというと、 IDirect3DSwapChain9* pSwapChainRaw = NULL; m_pDevic…

最も多くの C コンパイラで動作するコードの作成

C++

という項目がMSDNにあったので、見てみたら、なかなか面白いものでした。 MFCを使わずAPIで。 Microsoft拡張機能を無効に。 ANSI規格C++ライブラリのiostreamとSTLを使え。 だそうです。最初のはまぁ大目に見るとして、問題は2番目です。ためしに設定で無効…

boost::operator

C++

はじめてboost::operatorなんて使ってみました。といっても、boost本にあるoperator<>ではなくて、additiveとadditive2なんですが。サンプルでは非常に簡単に見えるんですが、サポートしなくない演算子とかがある場合は結構面倒です。 #include class Func :…

面倒なので

C++

std::map g_Variable; じゃだめですか?まぁany型知ってる人なら一度は考えると思うんですけど。

つまらないバグ

std::vector array; SomeType valueBeingInserted; array.insert( &a[ insertPosition ] ); と書いたとき、値が配列の中に追加されていなくて、しばらく原因がわからないというつまらないミスをしてしまいました。正しくは array.insert( &a[ insertPosition…

コンテナに挑戦

C++

algorithmとかで流用が出来そうな2次元配列を書いてみようということで、STLのソースとしばらくにらめっこ。とりあえず、二重のfor文が解消できるようになればいいなぁとか思ってみたんですが、なんだかiteratorの設計がどうなるか良く分からなかったので頓…

テンプレート

C++

オチもなにもない話です。例えば、ファイルを読む関数で、 001 class File { 002 public: 003 template< typename T > 004 void Read( T& data ){ 005 fread( &data, sizeof(T), 1, fp ); 006 } 007 }; とかいう関数があったとします(不要な部分はかなり中…

STLPortのリーク

C++

詳しくはよくわからないのですが、STLportは意図的にリークを発生させているらしいです。なので、 #define _CRTDBG_MAP_ALLOC #include (中略) _CrtSetDbgFlag( _CRTDBG_LEAK_CHECK_DF | _CRTDBG_ALLOC_MEM_DF ); をやったときに、リークが発生する場合が…

static const

C++

なんだか、クラスでのstaticでconstな変数が悪さをするようで。しかも、多分特定状況のみで。もしも原因不明なバグがあったら、ひとつの可能性として、これがあることも頭に入れとくといいのかもしれません。ほんと、特定状況に限りますが…

プロパティ

C++

先日http://d.hatena.ne.jp/rich850/20040623書いてみたプロパティっぽい案ですが、引数の正当性チェックができないとか、プロパティの抽象化ができていないという点で、全く駄目駄目でした。なんだかデジャヴが…