1

私はYouTubeで「最新のC++テクニックの紹介(パートI)」というタイトルのブーストコントークを見ていました。22分頃、スピーカーは間接参照演算子をオーバーロードするクラスを表示します。

template<typename T,
         typename CheckingPolicy = NoChecking,
         typename BadPointerPolicy = BadPointerDoNothing>
class pointer_wrapper
{
public:
    pointer_wrapper() : value_(0) {}
    explicit pointer_wrapper(T* p) : value_(p) {}

    operator T*()
    {
        if ( ! CheckingPolicy::check_pointer(value_) )
        {
            return BadPointerPolicy::handle_bad_pointer(value_);
        }
        else
        {
            return value_;
        }
    }

private:
    T* value_;
};

間接参照演算子をオーバーロードするこの方法を見たことがありません。リターンタイプがないのはなぜですか?また、'operator'キーワードの後に​​Tが表示されるのはなぜですか?私はいつもこの演算子をオーバーロードする方法は次のようだと思っていました:

T& operator *()
{
    // ...
    return *value_
}

誰かが興味を持っているなら、ここに話があります

4

1 に答える 1

1
于 2012-08-18T12:13:40.043 に答える