J'ai un tas de fonctions, a.process
, b.process
, c.process
..., appelons-les a
, b
, c
... que tous prennent un std::string
comme paramètre et retourner un std::string
.test toutes les combinaisons de fonctions dans chaque commande
Compte tenu d'une std::string s
initiale, je veux générer chaque sortie de combinaisons possibles de a
, b
, c
... appelé dans un ordre donné et s
en entrée initiale.
Ainsi, par exemple, je veux calculer a(s)
, b(s)
, c(s)
, a(b(s))
, a(c(s))
, b(a(s))
, b(c(s))
, c(a(s))
, c(b(s))
, a(b(c(s)))
, etc.
Je pense que je pourrais faire une fonction pour générer toutes les permutations de une liste, quelque chose comme Python itertools.permutations
mais j'ai deux principales questions ici:
Je ne veux simplement toutes les permutations , Je veux chaque permutation dans chaque ordre.
Et plus important encore, je ne sais pas sur la façon de stocker des fonctions dans des tableaux comme on pourrait facilement le faire en Python.
Je dois aussi que chaque sortie possible est livré avec les combinaisons de fonctions qui ont généré si pour l'exemple que j'ai donné ci-dessus, je sais que les résultats sont dans l'ordre suivant: "a"
, "b"
, "c"
, "ab"
, "ac"
, "ba"
, "bc"
, "ca"
, "cb"
, "abc"
, etc.
Comment pourrais-je mettre en œuvre que dans C++?
Comment dois-je faire si mes fonctions sont extraites de cas? Je ne peux pas initialiser le vecteur de fonctions avec {{class1.a, class2.a, class3.a} 'par exemple, mais je ne peux pas utiliser' CLASS1 :: a' car mes fonctions varient en fonction de l'initialisation de l'instance. – Yksuh
Changez 'Fn' en' std :: function 'et initialisez avec' [&] (std :: string s) {return class1.a (s);} ' . [Plus d'informations sur lambdas] (http://en.cppreference.com/w/cpp/language/lambda) –