我在 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_
}
如果有人有兴趣,这里是谈话