2009-08-26から1日間の記事一覧

テンプレート定義時のtypenameとclassの違い

ロベールのC++入門講座 09-02 template<typename T> ... と template<class T> ... において、動作の違いはまったくないそうです。ただし古いコンパイラではtypenameだと対応していない可能性があるらしいです。とりあえず本ブログではタイプ量の少ないclassを使っていきたいと思</class></typename>…

無名の名前空間

ロベールのC++入門講座 08-13namespaceを名前無しで定義すると無名の名前空間になります。 namespace { int i = 100; } こうして定義されたi変数はスコープがファイル内(ブロック内ではないことに注意)に限られます。 // -- main.cpp -- #include <iostream> namespa</iostream>…

別名の名前空間を定義する

ロベールのC++入門講座 08-13namespaceによる名前空間の別名を定義することができます。 #include <iostream> namespace FooBarBaz { int i = 10; } // 別名の定義 namespace FBB = FooBarBaz; int main () { // アクセスできる std::cout << FBB::i << std::endl; ret</iostream>…

std::swap、std::max、std::min

C++

http://www.geocities.jp/ky_webid/cpp/library/034.html補助的な関数です。 std::swap関数 値の入れ替えをするだけの関数です。 #include <iostream> #include <algorithm> using std::cout; using std::endl; int main () { int a = 10; int b = 20; cout << "a = " << a << end</algorithm></iostream>…

入出力ストリーム

C++

http://www.geocities.jp/ky_webid/cpp/library/029.html http://www.geocities.jp/ky_webid/cpp/library/030.html入出力ストリームの話です。ちょうど今ロベールで勉強してるところですね。実は今まで使用していたstd::coutというのはstd::ostreamクラスの…

アロケータ

C++

http://www.geocities.jp/ky_webid/cpp/library/028.htmlここはざっくり読み進めるだけにしておきます。基本的にはplacement newを使ってメモリプールから領域を確保することでnew/deleteの処理速度の低下を防ぐ目的だといえば早いでしょうか。(違うかもし…

テンプレートの実装のエクスポート

ロベールのC++入門講座 09-08テンプレートの実装をヘッダに書かなければならない理由 - (void*)Pないとの続きです。前回の記事でテンプレートの実装はヘッダで書かなければならないと言っていましたが、実はexportという指定子(?)を使えばヘッダに宣言だけを…

関数テンプレートにテンプレート引数のデフォルト値が渡せない理由

ロベールのC++入門講座 09-08前にテンプレートの勉強をした時に疑問に思ってた部分ですが、ロベール本で少し言及がありました。 実は関数テンプレートのテンプレート引数の場合はデフォルト引数をとることができません。これはおそらく、関数テンプレートの…

テンプレート引数の記述を省略する

ロベールのC++入門講座 09-07タイトルがちょっとわかり辛いですが、例を見ればすぐわかると思います。まず以下の処理を見てください。 template<class T> class CSample { public: CSample<T>& operator=(const CSample<T>& obj) { // 中身は適当。とりあえず自分自身を返し</t></t></class>…

テンプレートの実装をヘッダに書かなければならない理由

ロベールのC++入門講座 09-03ロベール本ではテンプレートの実装はヘッダに書かなければならないとさらりと書かれていましたが、何故そうしないといけないのかが本を読むだけでは今一良くわからなかったので色々調べてみたところ、理由がわかりました。まず宣…