C++

ところがどっこい 続・Flags VS Delegate VS Inheritance

前回の続き 〜あらすじ〜 デリゲート国ストラテジパターン族の軍と、フラグ国軍、そしてインヘリ国軍が、保守ヶ原で三つ巴の戦いをしていた。フラグ軍はその機動力を生かし、他両軍を撹乱したが、デリゲート軍とインヘリ軍の伏兵により本陣を突かれ、一時戦…

ストラテジパターンか、フラグによる変更か、インヘリタンスによる変更か

まずはじめに ふと思ったことで良くある話しだと思う。あるオブジェクトがあったとき、そのメソッドの振る舞いをダイナミックに変更したいなら、どのように設計し実装するべきかということ。例えば、処理A-B-Cをするクラスがあったら、A-B、A-C、A-B-C、のよ…

boost::threadにまつわる思う色々

C++

半分メモ変わり。Boost::threadには大きく分けて二通りのThread生成方法がある。 staticな関数で構成された、0からスタートのスタティックスレッド あるインスタンスがバインドされて実行されるインスタンスベーススレッド 今仮に名前を「スタティックスレッ…

boost::thread

C++

Boost::threadのコンストラクタは中々ピーキーだなぁと思った。 まず次のようなコードはエラーになる class A{ public: void f(int x){ std::cerr << x << std::endl; } void A(){ boost::thread th(&A::f, 1); //Boost 1.36以上だと、boost::bindは要らない…

Privateな変数について

C++

書いててふと気になったので試してみた。こんな感じのソース #include <iostream> class A{ private: int i; public: A(i) : i(i); bool look(A& a){ return a.i > 0; } }; int main(){ using namespace std; A a1(1), a2(-1); if(a1.look(a2)) cout << "positive" << </iostream>…

C++の悩ましいイテレータ

C++

STLのstd::vector::iterator というのはtypedefであって、クラスではない。 なので、 std::vector<int> vec; std::vector<int>::iterator it; it = vec.begin(); it = it + 10; //← vec.end()を越える for(int i = 0; it != vec.end(); it++){ cout << "What's?" <</int></int>

C++でのポリモーフィズムと継承と、コード保守性

C++

結論から言うと「ポインタを使うしかない」ということなのですが,まずはいくつかの問題とパターンを見てみましょう. 初めは、C++で継承を使ったポリモーフィズム実現まで まず例題として複数クラスが関連したものを想定します.今回は下記のような小説と本…

C++

久しぶりにC++をがっつり書いた気がする。ずっと動的型言語(Prolog、Ruby)に頼り切っていたので、完全に感覚がなまっていた。Javaのようにポリモーフィズムも十分に使えないし、多重継承のせいで、上位クラスメソッドも名前空間付きで呼び出さないといけな…