6
這裏訪問是(簡化的)基類:C++:與CRTP,在派生類定義的類不是基礎類
template <class T>
class SharedObject
{
protected:
QExplicitlySharedDataPointer <typename T::Data> d;
};
這裏是衍生自:
class ThisWontCompile : public SharedObject <ThisWontCompile>
{
private:
friend class SharedObject;
struct Data : public QSharedData
{
int id;
};
};
是否有任何解決方法來訪問ThisWontCompile :: Data from SharedObject?從基礎對象派生的對象究竟能夠做什麼和不能做什麼?
因此,我根本無法訪問任何派生類成員? – Septagram 2011-04-04 05:17:57
@Stagram:不直接,不。如果該解決方案適用於您的特定場景,我會考慮鏈接答案中的特質類解決方案。 – 2011-04-04 05:21:48
@Stagram:如果你陳述你實際需要解決的問題,我們可能會在那裏提供幫助。至於你的特定問題,你可以訪問CRTP模板中的實例化類的成員,只要你強制轉換,並且這些成員的使用不會影響類型的內存佈局(即不能使用'static const int '在實例化類型中設置CRTP類中數組的大小)。我認爲這個特性被現代C++設計中的Alexandrescu用於基於策略的C++類層次設計。 – 2011-04-04 08:03:37