2008-01-01から1年間の記事一覧
図書カードがあるからと調子に乗って買いまくってしまいました。年内に読み切れるでしょうか……。既存の積ん読を消化することも年内には無理な気がする。 ゲームプログラマになる前に覚えておきたい技術作者: 平山尚(株式会社セガ)出版社/メーカー: 秀和シス…
STLのコンテナが持っている reverse_iterator 、便利なようで erase や insert ができなくて不便だなと思ったら、 base メンバ関数なんてものがあるんですね。これを使うと iterator が取れるので、 erase やらなんやらが呼べるようになるようです。始めて知…
一度 DeleteWindow してから再度 Create する。リソースの解放漏れがあると、大体ASSERTで落ちてくれます。便利ですね。……おかげではまった(実行時に落ちまくり)わけですが、まぁ、自業自得ですね(その画面書いたのは自分じゃないんですが)。しかし、問題が…
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>…
ラップするしかないのだろうか。 #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>…
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いつの間にか日本語に訳されていた。ブクマ見ると今年の四月にはあったらしい。知らなかった……。
Boost 1.36.0 から追加された Boost.Accumulators。統計関数がいろいろあるのですが、標準偏差がないっぽいなぁということで、作ってみました。拡張方法はドキュメントに書いてあるようなのですが読んでもよくわからなかったのでソース読みつつ適当にやって…
ちょっとしたCSVファイルをRubyで作ろうとしたときなど、これまでわざわざ File.open("***.csv", "w") { |f| f.puts(...) } などとしていたのですが、 puts(...) と書いてコマンドプロンプト上で ruby hoge.rb > ***.csv と打てばファイルに吐けるんですよね…
・めもりかくほ C onlyでわりと規模の大きいときは呼び出し元で確保するとして, 最初にポインタをNULLにして渡すと必要なサイズだけが返ってきて改めてそのサイズを確保して呼び出すというのが一番安全かな. でもその手順を毎回書くのは面倒だから呼び出し先…
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>…
セルを全選択した状態で、条件付書式で条件を「数式が」にして例えば: =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, _)みた…
流行っているらしいのでインストールだけしてみました(何周遅れ?)。 インストール MacPortsで一発。 sudo port install scala alias(zsh) 実行しようとすると cal コマンドと打ち間違えていないかと zsh がうるさいので correct を無効化。 alias scala='noc…
ボタンと言うかまぁなんでもいいのですけど、引数に応じて生成されるオブジェクトを変更したい場合。それぞれのオブジェクトを生成する(newする)関数を作成し、それを配列に入れておいて、ボタンのインデックスに応じて呼ぶ関数を切り替えるのはどうか。最初…
まぁ当たり前のことなのですけれど……。 1 std::vector<float> x; std::transform(x.begin(), x.end(), x.begin(), std::log); // error log はオーバーロード関数なので、どの関数を呼ぶべきかコンパイラが判断できずにエラーになってしまいます。しかし、 int を渡</float>…
その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>…
struct A { A(A* = 0) {} void foo() {} }; int main() { A obj = new A(); obj.foo(); return 0; } 上記のコードはコンパイルも実行も普通にできます。最初見たときはちょっとびっくりしましたが、普通にコンストラクタが呼ばれるんですね。当然、 new で確…
以下のコードをコンパイルすると cl.exe が強制終了します。バージョンは VC8 。 #include <boost/bind.hpp> struct Hoge { void foo(int) {} }; void main() { Hoge hoge; boost::bind(&Hoge::foo, hoge); } まぁコンパイルの通らないコードなので落ちても構わないのですが</boost/bind.hpp>…
#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 や malloc を自分で定義すればメモリ領域を確保する度にそれを記録することができます。前のエントリで VC++ でメモリリークの検出を行えるようにしてみましたが、それをとても簡略化したものを試しに自分で実装してみました。かなりいい加減ですが(テス…
VC++ のライブラリにはメモリリークの検出機能があります。関数ひとつ呼んでおくだけでアプリケーション終了時にメモリの解放漏れを出力ウィンドウに表示してくれるという便利なものなのですが、実際にこれを使うまでの過程に罠が多いのでメモしておきます。…
Pipeline operatorを見て、ただ関数呼び出しの変形をしているだけで何が嬉しいのだろうと思っていた頃が私にもありました(AA略)。関数呼び出しが何重にもなっているとありがたさが実感できる気がします。 let H dummy = printf "H" let e dummy = printf "e"…
ベイダー日記の方更新してから思い出したけど、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 のようなことをやってみました。 #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>…
> 演算子を使用するとシェルのパイプのようなことができるようです。演算子の左辺の値を右辺の関数に渡してくれます。 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) 上と下の…
整数のリストに含まれる各要素の合計を求める関数を書いてみました。リストは [0;1;2;3] などとして定義しますが、Haskellのように [0..5] みたいにも書けます。これは [1, 2, 3, 4, 5] と等価です。再帰を使ってみます。 let arr = [1..10] let rec sum_rec…
スーパーpre記法でOCamlの色分け利用すると、はてなキーワードのOCamlのページに載ってしまうらしい。なんだかノイズになってしまってますね。OCamlネタを期待されて来られた方には申し訳ないです。表に出てない文字列はキーワードとして拾わないようにして…
WPFのコントロールは自由に入れ子にすることができるので、例えばコンボボックスの中にコンボボックスを入れるなどといった事も簡単に行えます。コンボボックスの各要素をチェックボックスにしてみます。 #light #I @"C:\Program Files\Reference Assemblies…
WPFにも挑戦してみました。Windowにコントロールを追加するメソッド(AddChild)が外部からアクセスできないので芋づる式にクラス定義と継承までやってしまいました。理解はしていません。MSDNブログの Learning WPF through F#, and vice versa, by John Liao…