閑古鳥

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

2008-01-01から1年間の記事一覧

購入記録

図書カードがあるからと調子に乗って買いまくってしまいました。年内に読み切れるでしょうか……。既存の積ん読を消化することも年内には無理な気がする。 ゲームプログラマになる前に覚えておきたい技術作者: 平山尚(株式会社セガ)出版社/メーカー: 秀和シス…

reverse_iterator

C++

STLのコンテナが持っている reverse_iterator 、便利なようで erase や insert ができなくて不便だなと思ったら、 base メンバ関数なんてものがあるんですね。これを使うと iterator が取れるので、 erase やらなんやらが呼べるようになるようです。始めて知…

MFCで作成したウィンドウがリソースをちゃんと解放しているか調べる方法?

C++

一度 DeleteWindow してから再度 Create する。リソースの解放漏れがあると、大体ASSERTで落ちてくれます。便利ですね。……おかげではまった(実行時に落ちまくり)わけですが、まぁ、自業自得ですね(その画面書いたのは自分じゃないんですが)。しかし、問題が…

boost::filter_iteratorは便利だけど書くのがめんどい

boost::make_filter_iteratorとか毎回書くのが面倒なので、省略したい。ということで適当に関数を作ってみる。 template<class Pred, class T, class F> void filterd_foreach(T begin, T end, F f) { std::for_each( boost::make_filter_iterator<Pred>(begin, end), boost::make_filter_iterator<Pred></pred></pred></class>…

int* array; みたいなのを Boost.Range で扱いたい。

C++

ラップするしかないのだろうか。 #include <iostream> #include <algorithm> #include <boost/range.hpp> template<class T> class Array { size_t m_size; T* m_ptr; public: Array(T* ptr, size_t n) : m_ptr(ptr), m_size(n) {} typedef T* iterator; typedef T const* const_iterator; iterator begin() </class></boost/range.hpp></algorithm></iostream>…

typename

C++

boost::range_iteraotr<>::typeを使うとコンパイルが通らない。たとえば以下のprint関数。letsboost::range悩んだ末Boost.Rangeのドキュメントを読んだところtypenameが必要らしい。 template<typename Range> void print( Range& r ) { typename boost::range_iterator<Range>::typ</range></typename>…

More C++ Idioms

C++

More C++ Idiomsいつの間にか日本語に訳されていた。ブクマ見ると今年の四月にはあったらしい。知らなかった……。

Boost.Accumulatorsを拡張する

Boost 1.36.0 から追加された Boost.Accumulators。統計関数がいろいろあるのですが、標準偏差がないっぽいなぁということで、作ってみました。拡張方法はドキュメントに書いてあるようなのですが読んでもよくわからなかったのでソース読みつつ適当にやって…

コマンドラインで動かすスクリプトでファイルを出力するときにファイル操作は必要なかった

ちょっとしたCSVファイルをRubyで作ろうとしたときなど、これまでわざわざ File.open("***.csv", "w") { |f| f.puts(...) } などとしていたのですが、 puts(...) と書いてコマンドプロンプト上で ruby hoge.rb > ***.csv と打てばファイルに吐けるんですよね…

メモリ確保

・めもりかくほ C onlyでわりと規模の大きいときは呼び出し元で確保するとして, 最初にポインタをNULLにして渡すと必要なサイズだけが返ってきて改めてそのサイズを確保して呼び出すというのが一番安全かな. でもその手順を毎回書くのは面倒だから呼び出し先…

ゆの in C++

C++

http://subtech.g.hatena.ne.jp/cho45/20080708/1215450151 http://subtech.g.hatena.ne.jp/miyagawa/20080708/1215473551 #include <iostream> using namespace std; static int _ = 1; struct X_ { X_() { this->operator /(0); } X_& operator /(int a) { static ch</iostream>…

Excelの条件付書式で指定した列の内容に応じて行全体の書式を変更する

セルを全選択した状態で、条件付書式で条件を「数式が」にして例えば: =INDIRECT(ADDRESS(ROW(),1))="済"などと入力すると、一列目が「済」になっている行の書式を変更することができる。ググってるともっと簡単にできそうなのだけど、なぜかうまくいかない…

部分適用

def add(x: Int)(y: Int) = x + y val add2 = add(2) _ println(add2(3)) // => 5と書く事ができるらしい。が、こうすると、 //println(add(4, 5)) println(add(4)(5))上の書き方ができなくなる。 def add(x: Int, y: Int) = x + y def add2 = add(2, _)みた…

Scala

流行っているらしいのでインストールだけしてみました(何周遅れ?)。 インストール MacPortsで一発。 sudo port install scala alias(zsh) 実行しようとすると cal コマンドと打ち間違えていないかと zsh がうるさいので correct を無効化。 alias scala='noc…

押したボタンによって生成するオブジェクトを変更したい場合などに、どういうコードを書くのが一番短く書けるだろうか

C++

ボタンと言うかまぁなんでもいいのですけど、引数に応じて生成されるオブジェクトを変更したい場合。それぞれのオブジェクトを生成する(newする)関数を作成し、それを配列に入れておいて、ボタンのインデックスに応じて呼ぶ関数を切り替えるのはどうか。最初…

融通が利かないなぁと思うところ

C++

まぁ当たり前のことなのですけれど……。 1 std::vector<float> x; std::transform(x.begin(), x.end(), x.begin(), std::log); // error log はオーバーロード関数なので、どの関数を呼ぶべきかコンパイラが判断できずにエラーになってしまいます。しかし、 int を渡</float>…

GetProcAddressで戻り値をキャストするのが面倒くさいので少し考えてみた

C++

その1。 typedef void (__stdcall * Func)(); template<class F> F GetProcAddress2(HMODULE module, LPCSTR name) { F f = reinterpret_cast<F>(::GetProcAddress(module, name)); _ASSERT(f); return f; } Func f = GetProcAddress2<Func>(dll, "Func"); ってASSERT挟んだだ</func></f></class>…

非ポインタ型の変数にポインタを代入

C++

struct A { A(A* = 0) {} void foo() {} }; int main() { A obj = new A(); obj.foo(); return 0; } 上記のコードはコンパイルも実行も普通にできます。最初見たときはちょっとびっくりしましたが、普通にコンストラクタが呼ばれるんですね。当然、 new で確…

cl.exeを落とす

C++

以下のコードをコンパイルすると cl.exe が強制終了します。バージョンは VC8 。 #include <boost/bind.hpp> struct Hoge { void foo(int) {} }; void main() { Hoge hoge; boost::bind(&Hoge::foo, hoge); } まぁコンパイルの通らないコードなので落ちても構わないのですが</boost/bind.hpp>…

BOOST_FOREACH で std::map を使うとエラーが出る事がある

C++

#include <map> #include <boost/foreach.hpp> void f() { std::map<int, int> m; BOOST_FOREACH(std::map<int, int>::value_type const& iter, m) { } return 0; } これ VC8 でコンパイルが通りません……。エラーが大量に出るのですが、その前に BOOST_FOREACH の引数が多すぎると言う警告(C4002)が出るの</int,></int,></boost/foreach.hpp></map>…

new をオーバーロードしてメモリリークを自力で検出

C++

new や malloc を自分で定義すればメモリ領域を確保する度にそれを記録することができます。前のエントリで VC++ でメモリリークの検出を行えるようにしてみましたが、それをとても簡略化したものを試しに自分で実装してみました。かなりいい加減ですが(テス…

メモリリークの自動検出をしてみる

VC++ のライブラリにはメモリリークの検出機能があります。関数ひとつ呼んでおくだけでアプリケーション終了時にメモリの解放漏れを出力ウィンドウに表示してくれるという便利なものなのですが、実際にこれを使うまでの過程に罠が多いのでメモしておきます。…

パイプで遊ぶ

Pipeline operatorを見て、ただ関数呼び出しの変形をしているだけで何が嬉しいのだろうと思っていた頃が私にもありました(AA略)。関数呼び出しが何重にもなっているとありがたさが実感できる気がします。 let H dummy = printf "H" let e dummy = printf "e"…

pstade::egg::pipable

C++

ベイダー日記の方更新してから思い出したけど、C++でPipeline operatorのようなことって、pstate::eggで既にやっているのを見たような……。 http://vader.g.hatena.ne.jp/wata_d/20080221/1203583962 探したらありました。 #include <iostream> #include <pstade/egg/pipable.hpp> using namespa</pstade/egg/pipable.hpp></iostream>…

F#の Pipeline operator もどきをC++で実装してみた

C++

>演算子をオーバーロードして、F#の Pipeline operator のようなことをやってみました。 #include <iostream> #include <boost/function.hpp> using namespace std; int one() { return 1; } int two() { return 2; } void print_func(int n) { cout << n << endl; } struct print_obj { vo</boost/function.hpp></iostream>…

Pipeline operator

F#

> 演算子を使用するとシェルのパイプのようなことができるようです。演算子の左辺の値を右辺の関数に渡してくれます。 let inc x = x + 1 let dec x = x - 1 do printfn "%d" (dec(dec(dec(inc 3)))) do printfn "%d" (inc 3 |> dec |> dec |> dec) 上と下の…

リストに対する操作

F#

整数のリストに含まれる各要素の合計を求める関数を書いてみました。リストは [0;1;2;3] などとして定義しますが、Haskellのように [0..5] みたいにも書けます。これは [1, 2, 3, 4, 5] と等価です。再帰を使ってみます。 let arr = [1..10] let rec sum_rec…

OCamlネタはありません、すいません

スーパーpre記法でOCamlの色分け利用すると、はてなキーワードのOCamlのページに載ってしまうらしい。なんだかノイズになってしまってますね。OCamlネタを期待されて来られた方には申し訳ないです。表に出てない文字列はキーワードとして拾わないようにして…

WPFでコントロールを入れ子にしてみる

WPFのコントロールは自由に入れ子にすることができるので、例えばコンボボックスの中にコンボボックスを入れるなどといった事も簡単に行えます。コンボボックスの各要素をチェックボックスにしてみます。 #light #I @"C:\Program Files\Reference Assemblies…

F# で WPF

WPFにも挑戦してみました。Windowにコントロールを追加するメソッド(AddChild)が外部からアクセスできないので芋づる式にクラス定義と継承までやってしまいました。理解はしていません。MSDNブログの Learning WPF through F#, and vice versa, by John Liao…