Ho letto il codice per QScopedPointer
e ho trovato qualcosa che non sono stato in grado di dare un senso.Qual è lo scopo dell'operatore RestrictedBool in QScopedPointer?
Ecco il codice pertinente da QScopedPointer
su code.qt.io:
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;
Capisco la definizione preprocessore che fa pensare qDoc QScopedPointer
ha un operator bool
invece di operator RestrictedBool
. Quello che non capisco è lo scopo RestrictedBool
e come funziona. Ad esempio, un'implementazione più semplice è:
inline operator bool() const
{
return !isNull();
}
In breve: Cosa sta succedendo qui? Perché operator RestrictedBool
restituisce in modo subdolo l'indirizzo di d
e perché esiste in primo luogo invece di operator bool
?
lo farei diciamo che è il modo Qt di "operatore esplicito bool" (pre C++ 11). – Jarod42
è limitato alle conversioni esplicite – user463035818
[questo] (http://lists.qt-project.org/pipermail/development/2012-January/001433.html) mi ha fatto trovare [questo] (http: //www.artima .com/cppsource/safebool.html) che sembra spiegare l'idea dietro di esso – user463035818