私は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_
}
誰かが興味を持っているなら、ここに話があります