1

我在 youtube 上观看了一个名为“现代 C++ 技术简介(第一部分)”的 boostcon 演讲。在第 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_;
};

我从未见过这种重载取消引用运算符的方式。为什么没有返回类型,为什么 T 出现在 'operator' 关键字之后?我一直认为重载这个操作符的方法是这样的:

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

如果有人有兴趣,这里是谈话

4

1 回答 1

1
于 2012-08-18T12:13:40.043 回答