ハンドルの使用~上のハンドル定義--『C++primer』ノート


汽车に乗って、勉强しないで、今日の绝笔....
====================================================================================================================================
続いて、容器管理対象が面倒で、ベースクラスも派生クラスもよくなく、ポインタが管理しにくいので、handleクラスで管理しなければなりません.BTW:プログラムではショッピングバスケット(shopping)basketで、ショッピングカートとは呼ばれませんが、ebayではショッピングカートはcartですが、
比較について:
review:operatorreview:デフォルトの実パラメータと関数のリロードも微妙な関係があり、時には似ていることもありますが、デフォルトの実パラメータがある場合は、実パラメータは順序を厳格に守らなければなりません.例えば、最初はisbnしかありません.もちろん、リロードは高級です.最初はpriceでも構いません.
今使う方法は、容器を定義するときにコンパレータを一緒に入れることです
std::multiset<Sales_item, Comp> items(compare);

この類の中の
typedef bool (*Comp)(const Sales_item&, const Sales_item&);
困惑一:
ここのtypedef、後ろに何もついていません.新しい名前は何ですか.
困惑する2、直接このcompareで定義しても一致しません
関数ポインタをレビューしましょう.
inline bool compare(const Sales_item& lhs, const Sales_item& rhs){
return lhs->book() < rhs->book();
} 
質問を添付します.このbook()関数は、直接的な要求はItemです.ベースメンバー.(カスタムオペレータItem_base*operator->のため)
Basketクラスの定義
class Basket {
    //type of the comparison function used to order the multiset
    typedef bool (*Comp)(const Sales_item&, const Sales_item&);//             ,           ?    typedef    
public:
    //make it easier to type the type of our set
    typedef std::multiset<Sales_item, Comp> set_type;
    //typedefs modeled after corresponding container types
    typedef set_type::size_type size_type;
    typedef set_type::const_iterator const_iter;
    Basket() : items(compare) { }                //initialze the comparator
    void add_item(const Sales_item &item){
                                items.insert(item); }
    size_type size(const Sales_item &i) const {    //item_count  
                        return items.count(i); }
    double total() const;                        //sum of net prices for all items in the basket
private:
    std::multiset<Sales_item, Comp> items;
};

double Basket::total() const {
    double sum = 0.0;
    for(const_iter iter = items.begin();iter != iterm.end();iter = items.upper_bound(*iter)){
        sum += (*iter) -> net_price(items.count(*iter));
    }    
    return sum;
}

to be continued ...