Liste des valeurs d'énumération lors de la compilation

sbi

Dans le C ++ moderne (GCC 5.1.0, donc C ++ 14, je suppose), quel est le moyen le plus rapide de transmettre, au moment de la compilation, une liste de valeurs d'un enum, puis, au moment de l'exécution, de vérifier quelles valeurs sont dans Là?

enum foobar { foo, bar, baz };

template<????>
void f() {
  if( contains<????, foo>() )
    std::cout << "foo!";
  if( contains<????, bar>() )
    std::cout << "bar!";
  if( contains<????, baz>() )
    std::cout << "baz!";
}

f<foo,bar>();

Remarque: Ceci est pour les tests unitaires, donc la vitesse, etc. n'est généralement pas pertinente et l'objectif principal est qu'elle soit déchiffrable par quelqu'un qui n'est pas familier avec le code.

Mikhail

Voici une proposition

#include <initializer_list>// pulled in by a lot of stuff

enum class options  { foo,bar,baz };
void test_func(options opt)
{

}
int main()
{
    auto test_vector = { options::foo, options::bar  };
    for (auto option : test_vector)
    {
        test_func(option);
    }
    return 0;
}

Un peu plus compliqué à vérifier que les vecteurs de test fournis contiennent ce qu'ils doivent contenir:

#include <initializer_list>
#include <algorithm>
#include <stdexcept>

enum class options { foo, bar, baz, wuz };
void test_func(options)
{

}

template<typename AT, typename BT>
void assert_test_vectors(AT a, BT check_these_items)
{
    for (auto item : check_these_items)
    {
        auto test = std::find(a.begin(), a.end(), item) != a.end();
        if (!test)
        {
            return throw std::runtime_error("You suck");
        }
    }
}

template<typename T>
void run_tests(T tests)
{
    const auto better_have_these = { options::foo, options::bar };
    assert_test_vectors(tests, better_have_these);
    for (auto test : tests)
    {
        test_func(test);
    }
}

int main()
{
    const auto test_vectors = { options::foo, options::wuz };
    run_tests(test_vectors);
    return 0;
}

Cet article est collecté sur Internet, veuillez indiquer la source lors de la réimpression.

En cas d'infraction, veuillez [email protected] Supprimer.

modifier le
0

laisse moi dire quelques mots

0commentaires
connexionAprès avoir participé à la revue

Articles connexes

C # - Convertit la liste des valeurs d'énumération en liste de chaînes

Erreur lors de la définition des valeurs d'énumération dans Rails

Liste des valeurs d'énumération inconnue

Mapper les valeurs d'énumération aux types correspondants avec des modèles au moment de la compilation ?

Comment générer des valeurs d'énumération au moment de la compilation avec une fonction macro en c #?

Erreur "n'ont pas de chevauchement" lors de la comparaison des valeurs d'énumération dans TypeScript

Passer la liste des valeurs d'énumération en tant que paramètres de requête HTTP

Comment attribuer des valeurs à l'intérieur d'une liste à l'aide de la compréhension de la liste d'énumération ?

Obtenir des valeurs d'énumération sous forme de liste de chaînes dans Java 8

Liste des chaînes d'énumération dans la liste déroulante HTML/PHP avec les valeurs de 2 tables MSSQL

Sortie inattendue lors de l'impression des valeurs d'énumération

Comment ignorer les valeurs d'énumération invalides lors de la désérialisation XML?

Jackson - La sérialisation EnumValues échoue lors de l'ajout dynamique de valeurs d'énumération

SyntaxError: missing) après la liste des arguments lors de la compilation d'ejs

Liste des valeurs d'énumération en java

Intercepter la population de la liste pour attribuer des valeurs lors de la désérialisation

Préparer la liste des entiers lors de la compilation

Énumération avec des valeurs de tableau / liste

Le moyen le plus efficace de supprimer des valeurs lors d'une itération sur une liste

Comment créer une énumération similaire à une énumération existante obtient une erreur de compilation lors des premiers changements de définition?

Liste des classes / objets internes lors de la compilation

comment gérer la valeur nulle lors de la récupération des valeurs de la liste de sessions

Enregistrement des valeurs de liste lors de la fin

Erreur de compilation lors de la tentative de suppression des doublons adjacents d'une liste de types de modèles

Erreur d'API Xero [ TokenInvalidAudience ] lors de la récupération de la liste des locataires

JDK1.7 - récupération de la constante d'énumération avec des points dans leurs valeurs

Obtenir la liste des noms d'affichage à partir de l'énumération c #

Lier les valeurs d'énumération à l'édition de la zone de liste déroulante cochée dans dev express

Utilisation des valeurs de liste déroulante pour définir les classements des utilisateurs lors de la création

TOP liste

  1. 1

    Comment exécuter un fichier python avec des droits d'administrateur dans pycharm

  2. 2

    obtenir le nombre de marqueur affiché sur la carte

  3. 3

    comment obtenir un objet de requête dans les tests unitaires de django?

  4. 4

    Microsoft.WebApplication.targets

  5. 5

    Exécuter la requête externe pour chaque date obtenue à partir de la requête interne

  6. 6

    comment convertir une chaîne en un tuple dateutil jour de la semaine sans utiliser eval

  7. 7

    Dans les modèles Hugo, comment vérifier la longueur du tableau de fichiers JSON?

  8. 8

    Référencement des assemblys de structure .net 4.7 dans la solution .net core 2

  9. 9

    Comment ajouter un texte dans un texte Python/Tkinter

  10. 10

    mongo kafka connect source

  11. 11

    Comment obtenir l'intégration contextuelle d'une phrase dans une phrase à l'aide de BERT ?

  12. 12

    Recherche de dicton Jinja2 à l'aide d'une clé variable

  13. 13

    Vérifier la longueur du nombre à partir du message, puis utiliser la valeur dans l'instruction

  14. 14

    Laravel 8: Attempt to read property "id" on null

  15. 15

    Comment obtenir tous les champs d'un objet (y compris sa superclasse), à l'aide de l'API Mirrors de Dart?

  16. 16

    Comment convertir une chaîne en tuple en utilisant `reads`?

  17. 17

    Aide de variable de débogage pprint jinja2

  18. 18

    Comment changer le navigateur par défaut en Microsoft Edge pour Jupyter Notebook sous Windows 10 ?

  19. 19

    mauvaise valeur pour le type long: - Postgresql, Hibernate, Spring

  20. 20

    définir une propriété pour chaque nœud dans neo4j

  21. 21

    Impossible d'accéder à la vue personnalisée pendant le test de l'interface utilisateur dans XCode

chaudétiquette

Archive