« ブログ開始 | トップページ | VC++2008のスマートポインタ »

2008年11月15日 (土)

文献「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のスマートポインタ »

パソコン・インターネット」カテゴリの記事

コメント

[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は予想通りコンパイルエラーとなる。

コメントを書く

(ウェブ上には掲載しません)

トラックバック


この記事へのトラックバック一覧です: 文献「Boost C++をチューンアップする最先端ライブラリ」 【1】:

« ブログ開始 | トップページ | VC++2008のスマートポインタ »