c++

C++ の行列ライブラリ Eigen で SVD と LSI

c++

C++ の行列ライブラリ Eigen(アイゲン)で SVD と LSI。 インストール % tar zvxf eigen-eigen-3.0.3.tar.bz2 % cd eigen-eigen-3.0.3 % mkdir build_dir % cd build_dir % cmake ../ % sudo make install サンプルを動かす Eigen: Getting started にあるサ…

cpplint.py

c++

Google のcpplint.py と flymake を組み合わせてコードを書いているときにスタイルチェックすることに。 flymake は cpplint.py の結果をエラー扱いしてしまうのだが警告扱いのほうがうれしい(色が赤くない)ので cpplint.py に手を入れて warning という文…

C++ クラスメンバ変数初期化し忘れで死んだ

c++

Thread::flags 初期化し忘れるとは数年以上前から潜んでいたバグ。gcc の警告オプションをいろいろ調べたのだが -Weffc++ が初期化子での初期化忘れを警告してくれるのでこれをデフォルトで追加しようかな。初期化忘れ警告は意外と出ない場合が多いみたいで…

C++ の参照

c++

#include <stdio.h> #include <string> using namespace std; class Hoge { private: string& s_; public: Hoge(string& s) : s_(s) {} void print() { printf("<%s>\n", s_.c_str()); } }; int main() { string data("abc"); Hoge hoge(data); hoge.print(); data.clear(); h</string></stdio.h>…

C++の class template を使えば static メンバの実体がヘッダファイルに書けるカラクリ

c++

C++の class template を使えば static メンバの実体がヘッダファイルに書けるというテクニックがある。考えてみると不思議な動作に思える。だって分割コンパイルしたら実体が複数個出来そうじゃない?。この裏側で起こっている事を実験前に予想して試したと…

g++ でカバレッジを取得する

C++

最近 Erlang でコードを書くときにカバレッジをとっている。TDD で開発を進めていて make check するとテストが走る。テスト終了後にブラウザでカバレッジが表示されるようにしてある。カバレッジの重要性はCode Completeを読むとよく分かる。カバレッジをと…

operator new static メンバ関数

c++

operator new をクラスの static メンバ関数にすると、そのクラスを new するときに使われるらしい。 FFI callback で実行可能属性のメモリ上に構造体を new するのに使ってみた。placement new より便利。

reinterpret_cast

c++

やってはいけない reinterpret_cast を踏んでしまったようだ。というか危険なのを承知で使っていたがやっぱり危険だった。

C++ で virtual public

c++

virtual public な継承。初めて使った。 class BinaryInputPort : virtual public BinaryPort class BinaryOutputPort : virtual public BinaryPort class BinaryInputOutputPort : public BinaryInputPort, public BinaryOutputPort 合ってる?それにしても…

Google Test

c++

EXPECT_STREQ で文字列の diff を表示して欲しい。どこが違うか分からない。

g++ がおっしゃいました「前のエラーにより混乱していますので、脱出します」

VM.cpp:306: error: redefinition of ‘scheme::Object scheme::VM::callClosure(scheme::Object, scheme::Object)’ VM.cpp:282: error: ‘scheme::Object scheme::VM::callClosure(scheme::Object, scheme::Object)’ previously defined here VM.cpp: In memb…

std::tr1::unordered_map, __gnu_cxx::hash_map and std::map with Boehm GC on Mosh

hash_func と equal_to と allocator を指定する例がほとんど見あたらなかったのでここに残す。 Mosh では __gnu_cxx::hash_map が 10% ほど残り2つと比べて速かった。 #ifdef USE_GNU_CXX_HASH_MAP #include <tr1/unordered_map> #include <ext/hash_map> struct hash_func { size_t operato</ext/hash_map></tr1/unordered_map>…

C++ vs Lisp

C++ vs Lisp from reddit.com。 タイトルは煽りぎみだけど、中身は C++ プログラマが Lisp に興味を持っていろいろ調べたよという話。

gcc の -Wall 以外の警告オプション

c c++

以前同僚の光成さんが、以下の warning オプションを使っていると書かれていたのが気になったので調べてみました。 -Wall -W -Wformat=2 -Wcast-qual -Wcast-align -Wwrite-strings -Wconversion -Wfloat-equal -Wpointer-arith もし上記以外にも良さげなオ…

C++コンパイラの話

c++

http://shinh.skr.jp/m/?date=20080322#p05 http://www.kmonos.net/wlog/83.html#_1721080322 http://d.hatena.ne.jp/odz/20080322/1206180371 おっと。 僕は自分のScheme VM 用のコンパイラを Scheme で書いたことしかないのであれですが。 確かに言語仕様…

こういうのってありかな?

c++

typedef std::basic_string< UCS4Char, std::char_traits<UCS4Char>, gc_allocator<UCS4Char> > UCS4String; ちょっと自信ないんだけど。</ucs4char></ucs4char>

ロベールのC++入門講座を読んで C++ を初歩の初歩から再入門するよ - 後編

c++

ロベールのC++入門講座を読んで C++ を初歩の初歩から再入門するよ - 前編の続きです。 13章 もっと深く(11:12) 13-12 から再開。 テンプレート引数には typename 以外のものも使えるよという話。 まずはテンプレート引数にクラステンプレートを渡す話。 …

ロベールのC++入門講座を読んで C++ を初歩の初歩から再入門するよ - 前編

c++

前置き 自分の C++ レベルに絶望したので「ロベールのC++入門講座」を読んで再入門していく過程を日記に書いていきます。 「おまえはそんなことも知らずにコードを書いていたのか!」「それは間違い!」など叱咤激励募集中です:-) 読んでみたら、たくさんの…

C++の本を買いに本屋行ってきた

c++

皆さんからたくさんのお勧めの本を教えていただきました。ありがとうございます。 さっそく恵比寿の本屋に行ってきました。 先日のエントリでは書いてなかったのですが Effective C++ 【改訂第2版】 Modern C++ Design は持っていまして目を通したことがあり…

C++で書くScheme処理系のオブジェクト表現を考え中

今日職場で色々アドバイスをもらい改善したものを、帰宅後拡張して混乱中。 C++難しい><。 small int や null などは即値として扱いたいという意図でおおもとは Gauche のオブジェクト表現を参考にしています。 null(SCHEME_NULL)の初期化がいまいちです…

C++のもやもや局面

c++

こういうのってどうしているんだろうな。 その1 Cのテクニックで構造体の最後のメンバを ポインタ or 配列 にして、それを経由して配列のサイズ以上にアクセスするってやつがあるじゃないですか。 固定長ヘッダを持つ、可変長のデータ構造とか(他にもあるけ…

VMの実装でC++のテンプレートをうまく使えないか

C++

某氏も指摘してくれていましたが VMの実装で C++ のテンプレートをうまく使って楽をしたり、コンパイル時に出来るだけの事をやっておくことは出来ないかなあ。(ノープラン)Template Insanity.

ロベール本

c++

id:yaneuraoさんのところで知ったのだけど。ロベールのC++入門講座。 昔とてもお世話になったなあ。>ロベールさんのサイト。 欲しいかも。

きたきた

C++でコード書いているのに (if って書きはじめた。

C++ のマクロで lower_case 的なものはないのかな

C++

#define HOGE(name) class name { int LOWER_CASE(name)##_; } HOGE(Hige); => class Hige { int hige_; }; みたいな。

カンマ演算子の活用

C++

カンマ演算子の悪用活用 #define FOREACH_LIST(list, kar, kdr, syntax) \ for (Object *l = list, *kdr = ((Cons*)l)->getCdr(), *kar = ((Cons*)l)->getCar(); \ ; kdr->isCons() ? (l = kdr, kdr = ((Cons*)l)->getCdr(), kar = ((Cons*)l)->getCar()):\ …

C++で多重継承を使ってはいけない1つの理由

C++

多重継承に限らないけど、仮想関数テーブル(へのポインタ変数)のせいで、キャストによってポインタのアドレスが変わることがある。 なのでガベージコレクタ(GC)を併用しているときに死ぬ。 GC は、new が返したアドレスが参照されているかどうか?で mark …

末尾再帰最適化をC/C++上で検知してみたい

C C++

某所で「処理系が末尾再帰最適化をしているかを、処理系で動くコードから判定できるか」的な話をふったところ C/C++ なら出来そうだよねと id:yaneurao さんからツッコミが。 やってみよう。 最適化されているなら is_tail_rec_opt_internal の引数である le…

C++で関数呼出しを視覚化 コールグラフを出力してみよう

C++

「Graphvizによるファンクション・コールの視覚化」を参考に、今開発中の Scheme インタプリタのコールグラフを出力してみた。 pvtrace のインストール http://www.mtjones.com/developerworks/pvtrace.zip 大きめの trace をしたいのであらかじめいくつかソ…

CとC++の混在時に悩む

C C++

Monaでのコーディングは基本 C++ なのだけどシステムコールや uIP など C で書かれたアプリケーションが混じるときに微妙。 enum を使って下の IP::ICMP のように定数を定義していても、Cが混じる場合は使えない。(namespace も同様) class IP { public: enu…