Supposons que j'ai un type incomplet
// in foo.hh
struct Hidden;
que je veux utiliser comme type d'élément d'une std::vector
. L'utilisation d'un union
Je peux "différer" les appels au(x) constructeur(s) et au destructeur de l'objet d'échange. std::vector
à la mise en œuvre du ou des constructeurs/destructeurs des unions.
// in foo.hh
struct Public {
union Defer {
std::vector<Hidden> v;
Defer();
// add copy/move constructor if needed
~Defer();
} d;
};
Maintenant je peux utiliser Public
en incluant uniquement foo.hh
et la liaison avec le(s) fichier(s) mis en œuvre Public::Defer::Defer()
y Public::Defer::~Defer()
. Seules les personnes qui auront besoin d'accéder à la définition complète des Hidden
.
Est-ce que c'est du C++ légal ? Si oui, depuis quand ?
Le contexte : Question qui est apparue dans ma réponse à une autre question .