私はQScopedPointer
のコードを読んでいて、私が理解できなかったことに出くわしました。QScopedPointerの演算子RestrictedBoolの目的は何ですか?
ここcode.qt.io上QScopedPointer
から適切なコードは次のとおりです。
template <typename T, typename Cleanup = QScopedPointerDeleter<T> >
class QScopedPointer
{
typedef T *QScopedPointer:: *RestrictedBool;
public:
...
#if defined(Q_QDOC)
inline operator bool() const
{
return isNull() ? Q_NULLPTR : &QScopedPointer::d;
}
#else
inline operator RestrictedBool() const
{
return isNull() ? Q_NULLPTR : &QScopedPointer::d;
}
#endif
...
inline bool isNull() const
{
return !d;
}
...
protected:
T *d;
私はのQDocがQScopedPointer
がoperator bool
の代わりoperator RestrictedBool
を持っていると思わせるプリプロセッサの定義を理解しています。どのような目的でRestrictedBool
が役立つのかわかりません。例えば、単純な実装は次のとおりです。要するに
inline operator bool() const
{
return !isNull();
}
:ここで何が起こっていますか? operator RestrictedBool
がd
のアドレスを手戻りしているのはなぜですか。operator bool
の代わりに最初に存在するのはなぜですか?
に私はなりそれが '明示的オペレータbool'のQt方法であると言います(pre C++ 11)。 – Jarod42
明示的な変換に限定されています – user463035818
[this](http://lists.qt-project.org/pipermail/development/2012-January/001433.html)は、[this](http://www.artima .com/cppsource/safebool。html) – user463035818