2010.05.06

【正誤情報】 『C++テンプレートテクニック』

C++テンプレートテクニック

P.003 リスト1-1について

if文の条件を訂正します。

【誤】if (size_ <= capacity_) {
【正】if (size_ == capacity_) {


P.014 3行目 MAXの定義について

カッコの対応を訂正します。

【誤】#define MAX(x,y) (((x)>(y) ? (x):(y))
【正】#define MAX(x,y) ((x)>(y) ? (x):(y))


P.057 リスト3-1について

ilst」を「llst」に訂正します。

【誤】

il = std::find(ilst.begin(), ilst.end(), 7L);
if (il != ilst.end()) { /* 見つかった!*/ }


【正】

il = std::find(llst.begin(), llst.end(), 7L);
if (il != llst.end()) { /* 見つかった!*/ }


P.090 リスト4-10について

「&」が抜けておりました。

【誤】

template <class T>
struct add_reference<T&> {
 typedef T type;
};


【正】

template <class T>
struct add_reference<T&> {
 typedef T& type;
};


P.121 下から4行目について

説明を修正します。

【誤】 クラスの型特性はなんでしょうか。それは「メンバを持っている」ということです。先ほどは「iterator型を持っている」というチェックをtypename C::iterator と書きましたが、「メンバを持っている」というのは同じように「C::*」と書くことができます。それを使って、リスト5-21のように実装します。
【正】 クラスの特徴とはなんでしょうか? それは「クラスにのみ許可された構文を使用できる」もしくは「メンバを使用できる」ということです。そしてこれは、「C::*」と書くことでチェックできます。
 実際にそれを使って、リスト5-21のように実装します。


P.122 5行目について

説明を修正します。

【誤】 「int C::*」とすることで、なぜ「メンバを持っている」という判定になるのでしょうか?
【正】 「int C::*」とすることで、なぜ「メンバを使用できる」という判定になるのでしょうか?


P.249 リスト11-8について

「s」が抜けておりました。

【誤】 for_each(v|reversed|filtered(is_even)|transformed(to_tring),disp)
【正】 for_each(v|reversed|filtered(is_even)|transformed(to_string),disp)


P.283 リスト11-38について

引数の名前を訂正します。

【誤】

make_transformed_iterator<func_result>(f_, r.begin()),
make_transformed_iterator<func_result>(f_, r.end())


【正】

make_transformed_iterator<func_ret>(f_, r.begin()),
make_transformed_iterator<func_ret>(f_, r.end())


P.303 リスト12-4について

「typename」指定が抜けておりました。

【誤】

template <class T>
using Vec = Vec_<T>::type;


【正】

template <class T>
using Vec = typename Vec_<T>::type;


P.336 索引について

見出しを修正します。

【誤】L
【正】T

【誤】M
【正】U

【誤】O
【正】X