2012-11-01から1ヶ月間の記事一覧

C#のプロパティ

いまさらだけども、C#のプロパティについて。要するに、外見はメンバ変数、内実はメソッドということですね。C++やJavaにはない便利な文法です。getter/setterを変数に見せかける糖衣構文といったところでしょうか。 namespace PropertyTest { class Hoge { …

なんだかよく分からないstd::for_each

いまさらながら、C++のstd::vectorの使い方を調べるなど。動的配列ということは分かったし、イテレータの使い方も分かったけど、std::for_eachを使った回し方はなんかよく分からない。ここまでトリッキーなことをして、どういうご利益があるのかな? #includ…

VC++の関数のアドレス

C言語で、関数のアドレスはポインタとして取得できるはずだが、Visual C++の場合、それは実際にはスタブでそこからジャンプ命令で関数の本体のアドレスに飛ぶ。引数のある関数の場合、その引数のアドレスの前が戻り先のアドレスであるはずなので、下記のよう…

実行中のメソッドをログ(C#)

実行時にメソッド名やコールスタックなどのメタデータを取得する仕組みをreflectionと言うそうですが、C#だと、System.Reflectionクラスがその機能を提供してくれます。下記は実行中のメソッドを表示するサンプルプログラム。 using System; using System.Co…

default(Type)

C#は静的型づけの言語なので、varもあくまで型推論で静的な型が決定するものです。 var hoge = new Hoge(); hoge = new Piyo(); // ←エラーになる なので、varの宣言時にnullを代入しようとすると、型が推論できないのでエラーになります。そういうときはdef…

関数の乗っ取り

hoge() を piyo() で乗っ取る例。(Windows の VC++にて) #include <stdio.h> #include <windows.h> void hoge(void) { printf("hogehoge\n"); } unsigned int original_hoge; void piyo(void) { printf("piyopiyo\n"); // 本来のhogeを呼び出す ((void(*)())original_hoge)(); } </windows.h></stdio.h>…

疎行列

疎行列(ほとんどの要素がゼロであるスカスカな行列)は、2次元配列で実装するとメモリの無駄遣いになるので、サイズが大きいなら連想配列で実装したほうが良い。C++でのやっつけな実装例。 #include<stdio.h> #include<map> // 疎行列 class SparseMatrix { public: typed</map></stdio.h>…