Aquí está el (simplificado) clase base:C++: Con CRTP, clase definida en la clase derivada no es accesible en la clase base
template <class T>
class SharedObject
{
protected:
QExplicitlySharedDataPointer <typename T::Data> d;
};
Y aquí es la deriva:
class ThisWontCompile : public SharedObject <ThisWontCompile>
{
private:
friend class SharedObject;
struct Data : public QSharedData
{
int id;
};
};
¿Hay alguna solución alternativa para acceder al ThisWontCompile :: Data desde SharedObject? ¿Qué es exactamente lo que se puede y no se puede hacer con el objeto derivado del objeto base?
Entonces, ¿no puedo acceder a ningún miembro derivado de la clase? – Septagram
@Septagram: No directamente, no. Consideraría la solución de clase de rasgos en la respuesta vinculada, si esa solución funciona para su escenario específico. –
@Septagram: si declara lo que realmente necesita resolver, podríamos ayudarlo allí. A partir de su pregunta en particular, puede acceder a los miembros de la clase de creación de instancias en la plantilla CRTP siempre que fuerce un reparto, y que el uso de esos miembros no afecte el diseño de la memoria del tipo (es decir, no puede usar 'static const int 'en el tipo de creación de instancias para establecer el tamaño de una matriz en la clase CRTP). Creo que esa característica es utilizada por Alexandrescu en Modern C++ Design en el diseño basado en políticas de jerarquías de clases C++. –