OVH Cloud OVH Cloud

Forward déclaration d'une inner-struct

1 réponse
Avatar
Vianney Lançon
Petite question à propos des forward déclarations.

J'ai une déclaration d'une classe qui déclare une sous-classe.

//MyClass.hpp

namespace MyNamespace
{
class MyClass
{
public:
struct MyStruct
{
int x;
};
};
}

Et une fonction qui a besoin d'un pointeur vers cette sous-classe.

Test.hpp;
//forward déclaration
namespace MyNamespace
{
class MyClas;
struct MyClass::MyStruct; // ne compile pas;
}

void doPrint( MyNamespace::MyClass::MyStruct* ptr);


Existe t'il un moyen de faire une forward déclaration d'une struct/class
définie dans une autre struct/class ou bien suis-je obigé de faire un
#include pour avoir la déclaration complète de la classe englobante.

Merci.
--
Vianney LANÇON
radix omnia malorum prematurae optimisatia est
-- Donald Knuth

1 réponse

Avatar
Gourgouilloult
Vianney Lançon wrote:

class MyClass;
struct MyClass::MyStruct; // ne compile pas;


Etant donné qu'on n'est pas censé pouvoir rajouter des choses dans
l'espace de noms d'une classe, ça me paraît normal de pas pouvoir écrire
ça. Donc il te faut effectivement la définition de MyClass en entier,
si la fonction qui a besoin de la classe interne n'est pas membre de
MyClass.

Après, bien sûr, une question plus délicate est de savoir si MyStruct
veut véritablement interne à une autre classe... enfin les questions de
conception, quoi.

Gourgou