我看這個CPP閃電談video 有它顯示了在0:37這個typedef是如何工作的?
template<typename T, typename cleanup = QScopedPointerDeleter<T>>
class QScopedPointer{
typedef T *QScopedPointer::*RestrictedBool; // how does this work?
//why not QScopedPointer<T> since QScopedPointer is a template?
public:
inline operator RestrictedBool() const
{
return isNull()? Q_NULLPTR : &QScopedPointer::d;
}
inline bool isNull() const{ return !d;}
protected:
T *d;
};
我有一個很難理解typedef T *QScopedPointer::*RestrictedBool;
這個代碼片段,這是什麼意思?
我創建了一個類似的類F
,但它不能編譯,class QScopedPointer
和class F
這兩個typedefs有什麼區別?
template<typename T>
class F{
typedef T *F::*bool;
public:
operator bool(){return true;}
};
專家提示:看看使用該類型存儲的值:'&QScopedPointer :: d'是指向成員指針的指針。還要注意'typedef'的語法是'typedef'。注意'RestrictedBool'是新名稱,在typedef中不能使用'bool'作爲新名稱。您也不需要在其自己的類定義中使用類模板參數。 –
chris