文献「Boost C++をチューンアップする最先端ライブラリ」 【1】
「Boost C++をチューンアップする最先端ライブラリ」 (ビョルン・カールソン(著) 村上雅章(訳) ピアソン・エデュケーション)
テスト環境:WindowsXP(SP2), VisualC++2003, Boost 1.33.1
サンプルプログラムをいくつかテストしてみて気がついた点を書いてみた。
[1] polymorphic_castのサンプル(53~54ページ)について、 VC++2003では「ランタイム型情報を有効にする(/GR)」を「はい」にしないと、コンパイルで「warning C4541... 」となる。
[2] lexical_castのサンプル(71~72ページ)について、
(1)クラスlexical_castableのメンバ
virtual void read_(std::istream& i) const {
i >> s_;
}
はコンパイルエラー C2679 となる。constを外した。
(2)このままのソースだと実行時に数字を入力しても boost::bad_lexical_castがスローされてしまう。クラスlexical_castableにpublicメンバー
std::string operator()(){
return s_;
}
を追加し、呼び出し側を
int i = boost::lexical_cast<int>(le());
とした。
[3] 第5章 Regexの130ページ。「Boostをビルドすれば、自動的にリンクが行われるようになるため(Windowsベースのコンパイラでも)、...」とあるが、VC++2003ではプロジェクトのプロパティで「追加のライブラリディレクトリ」に設定する必要があった。
自分の環境では「D:\Lib\boost_1_33_1\libs\regex\build\vc71」
[4] Anyのサンプル(152~154ページ)について、#include <string> を加えないとコンパイルエラー C2679 となる。
154~155ページのサンプルも同様。
[5] 第1章 Smart_ptrについて。shared_ptrなどに収容されたポインタを他のクラスにキャストしたいときどうすればよいのだろうか。 30ページにshared_ptrに対応するstatic_pointer_castの説明はあるが、サンプルプログラムが無いのは片手落ちの感。
« ブログ開始 | トップページ | VC++2008のスマートポインタ »
「パソコン・インターネット」カテゴリの記事
- トップページにTooltip (jQueryを使ったオリジナル)(2008.12.20)
- JAVAのハッシュテーブル HashMap(2008.12.15)
- C#のハッシュテーブル Dictionary(2008.12.15)
- C++/C#/JAVA コレクション比較 【ハッシュテーブルの比較概要】(2008.12.12)
- C++/C#/JAVA コレクション比較 【インデックスによる要素アクセス】(2008.12.10)
[6] scoped_ptrを関数に渡すときは参照渡しとする。
void func1(scoped_ptr a){ ... }
void func2(scoped_ptr& a){ ... }
boost::scoped_ptr a(new A());
//関数に渡す
func1(a); // コンパイルエラー
func2(a); // コンパイルOK
func1は予想通りコンパイルエラーとなる。
投稿: | 2008年12月 2日 (火) 09時41分