2010-04-01から1ヶ月間の記事一覧

1を左シフトした時の10進数と16進数の対応表

C++

だいたいの値をいつも忘れるのでメモ代わりに対応表を作ってみた。 | 1 << 0 | 1 | 0x00000001 | | 1 << 1 | 2 | 0x00000002 | | 1 << 2 | 4 | 0x00000004 | | 1 << 3 | 8 | 0x00000008 | | 1 << 4 | 16 | 0x00000010 | | 1 << 5 | 32 | 0x00000020 | | 1 <<…

Singletonクラスにauto_ptrを使うのは案外難しい

C++

またまたSingletonクラスの話です。昨日の続きです。自動でデストラクタを呼ばせる目的なら、自前でクラスを作るよりもauto_ptrを使った方が意図が伝わりやすいというコメントを頂き、確かにそうだなと思ったのでauto_ptrを使ってもう一度Singletonクラスを…

Singletonの話あれこれ

C++

さてここ最近ずっとSingletonについてあれこれ学んでる最中なのですが、なにやらまたしてもC++の深遠を覗いてしまった感があります。Singleton デザインパターンとかポインタとか - 野良C++erの雑記帳 シングルトンまとめ - Togetterこちらの記事で僕の疑問…

Singletonをテンプレート化する

C++

Singletonクラスの続きです。今回はSingletonクラスをテンプレート化して簡単に定義できるようにしてみたいと思います。 #include <iostream> using namespace std; template<class T> class Singleton { private: class Auto { public: T* m_instance; Auto() : m_instance(0){</class></iostream>…

Singletonクラスの内部で持つポインタの話

C++

先日の記事でコメントを頂いたのでちょっとSingletonクラスの内部で持つポインタについて自分なりに色々調べてみました。まず下記のようなシンプルなSingletonクラスを考えます。 #include <iostream> using namespace std; class Foo { private: static Foo* m_instan</iostream>…

SingletonじゃないクラスをSingleton化する方法を考える

C++

もともとSingletonではない元クラスをSingletonとして扱う方法がないかを考えてみる。条件として, 元クラスは引数無しのコンストラクタを呼べなくてはならない。また、当然のことながら元クラス単体を定義したりnewしたりできるということはここでは問題とし…

同名のcppファイルが未解決の外部シンボルになる話

VC

以下の問題で半日悩んだorz。 同名.cppファイルの自動解決は出来ないのか http://vsug.jp/tabid/63/forumid/72/postid/11589/scope/posts/Default.aspx 勝手にユニークな名前付けてくれても良さそうなのにどうもVC2008ではダメらしい。 同名のhoge.cppファイ…

const有り無し両方のメンバ関数を用意する理由

C++

参考書等をを見ると、例えば戻り値にメンバ変数への参照を返すようなメンバ関数を用意する場合、const有りとconst無しの両方を用意しています。 #include <iostream> using namespace std; class Foo { int m_num[10]; public: Foo() {} // const無し版 int& operator[</iostream>…

privateなメンバ変数にアクセスする

C++

たとえメンバ変数をprivateにしていたとしてもポインタを経由すればアクセスできてしまう。 #include <iostream> using std::cout; using std::endl; class Foo { private: int num1; int num2; public: void output () { cout << num1+num2 << endl; } }; int main ()</iostream>…

ostringstreamクラス

C++

文字の加工にはostringstreamが便利。 #include <iostream> #include <sstream> using std::cout; using std::endl; int main () { std::ostringstream ss; int i = 10; ss << "foo" << i << ".txt"; cout << ss.str() << endl; return 0; } $ main foo10.txtちなみにss.str()の</sstream></iostream>…