Ich habe den Code für QScopedPointer
gelesen und bin auf etwas gestoßen, das ich nicht verstehen konnte.Was ist der Zweck des Operators RestrictedBool in QScopedPointer?
Hier ist der relevante Code aus QScopedPointer
auf 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;
Ich verstehe die Präprozessordefinition die QDOC denken QScopedPointer
hat eine operator bool
statt operator RestrictedBool
macht. Was ich nicht verstehe, welcher Zweck RestrictedBool
dient und wie es funktioniert. Zum Beispiel kann eine einfachere Implementierung ist:
inline operator bool() const
{
return !isNull();
}
Kurz: Was hier passiert? Warum gibt operator RestrictedBool
hinterhältig die Adresse d
zurück und warum existiert sie an erster Stelle anstatt operator bool
?
würde ich Sagen wir, es ist der Qt-Weg von 'explicit operator bool' (vor C++ 11). – Jarod42
ist auf explizite Konvertierungen beschränkt – user463035818
[http://lists.qt-project.org/pipermail/development/2012-Januar/001433.html] hat mich dazu gebracht, [this] (http: //www.artima .com/cppsource/Safebool.html), die die dahinterstehende Idee zu erklären scheint – user463035818