Ответ 1
Это реализация Safe Bool Idiom, объясненная здесь.
Наивная реализация:
inline operator bool() const
{
return !isNull();
}
возвращает значение r bool
, которое может быть неявно использовано для других операций, например
QScopedPointer<Foo> foo(nullptr);
int i = 1;
if (foo < i)
...
- действительный код.
Резюме: RestrictedBool
является закрытым typedef
указателя на тип d
. Использование его в качестве возвращаемого типа для оператора означает, что он может использоваться в выражении if (if (foo)
), но не может использоваться с другими операторами.
Примечание: С++ 11 позволяет использовать explicit operator bool
, что устраняет необходимость в Идиоме Safe Bool в C + +11 или более поздней версии. Реализация для QScopedPointer
в С++ 11 может выглядеть так:
explicit operator bool() const
{
return !isNull();
}
Спасибо tobi303 и Jarod42 за предоставленную основу для ответа.
Дальнейшее чтение относительно С++ 11 и Идиомы Safe Bool:
- Chris С++ Мысли - Контекстно конвертировано в bool
- Идиома safe-bool устарела в С++ 11? - Вопрос SO
- Очень явный оператор bool - запись, специфичная для QScopedPointer