Voir le code ci-dessous.
J'ai 3 struct
s ( A
, B
y C
) définis dans 2 groupes (en réalité, j'en ai beaucoup plus). Les groupes servent à fournir un contexte dans le domaine réel que je modélise. Ces groupes sont mis en œuvre par l'intermédiaire de deux std::variant
s ( Group1
y Group2
).
J'ai une fonction qui peut renvoyer n'importe lequel des éléments sous-jacents suivants struct
s.
Pour fournir un seul type de retour pour la fonction, je crée un troisième type de retour, le std::variant
( AllGroups
) de mes deux variantes initiales ( Group1
y Group2
).
Cependant, mon problème est le suivant AllGroups
ne peut pas voir A
, B
o C
, seulement Group1
y Group2
.
Existe-t-il un moyen de conserver les structures définies avec une sorte de groupe, mais aussi de les regrouper en une seule ? std::variant
pour le type de retour de la fonction ?
#include <variant>
#include <iostream>
struct A{}; struct B{};
using Group1 = std::variant<A, B>;
struct C{};
using Group2 = std::variant<C>;
using AllGroups = std::variant<Group1, Group2>;
AllGroups getObject()
{
A a; // Simple logic for the general question
AllGroups ret(a);
return ret;
}
int main()
{
AllGroups ret = getObject();
// Here i'd like to check for the individual structs, not Group1 and Group2
// However I get a compiler error because the AllVariant can only see Group1 and Group2
std::cout << std::holds_alternative<A>(ret) << std::endl;
}