IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C++ Discussion :

std::make_array pour c++14 ?


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    199
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 199
    Par défaut std::make_array pour c++14 ?
    Bonjour à tous!

    Quelqu'un sait-il s'il existe une proposition pour std::make_array pour le futur standard c++? En effet il existe déjà make_tuple par exemple qui permet de déduire automatiquement le nombre d'argument, ce qui se révèle particulièrement intéressant!

    Le site http://www.meetingcpp.com/index.php/start.html qui recense pas mal de paper ne mentionne rien à ce sujet là!

    Merci beaucoup à tous!

  2. #2
    Membre chevronné

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2007
    Messages
    373
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Santé

    Informations forums :
    Inscription : Juin 2007
    Messages : 373
    Par défaut
    Bonjour,

    On peut déjà faire ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    std::array<float, 5> a1 = {{0.1, 0.2, 0.3, 0.4, 0.5}}; // possible en C++11
    std::array<float, 5> a2 = {0.1, 0.2, 0.3, 0.4, 0.5}; // suggéré pour la prochaine norme
    Tu voudrais pouvoir écrire quelque chose comme ça ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    auto a1 = std::make_array({0.1, 0.2, 0.3, 0.4, 0.5});
    // ... ou: 
    auto a2 = std::make_array(0.1, 0.2, 0.3, 0.4, 0.5);

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    199
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 199
    Par défaut
    Exactement! Je souhaiterais faire cela en fait :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    auto my_array = std::make_array(
        1,
        2,
     
    #if defined (MY_DEFINE)
        3,
    #endif
     
        4);
     
        for(auto const i& : my_array)
            // some code ...
    Sachant que le code qui suit la déclaration et l'initialisation de my_array ne dépend en aucun cas du nombre d'éléments! Il reste donc valide!

  4. #4
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 147
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 147
    Billets dans le blog
    4
    Par défaut
    Salut,

    Cette syntaxe ne fonctionnerait pas ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    auto my_array = {{
        1,
        2,
     
    #if defined (MY_DEFINE)
        3,
    #endif
     
        4}};
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    199
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 199
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    #include <array>
     
    int main()
    {
        auto my_array = {{
            1,
            2,
     
        #if defined (MY_DEFINE)
            3,
        #endif
     
            4}};
     
        for(auto &i : my_array)
        {
        }
    }
    Erreur de la part du compilateur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    g++ -o main.o -c main.cpp -W -Werror -Wall -Wfatal-errors -pedantic -pedantic-errors  -std=c++11
    main.cpp: In function ‘int main()’:
    main.cpp:13:11: error: unable to deduce ‘std::initializer_list<_Tp>’ from ‘{{1, 2, 4}}4}};
               ^
    compilation terminated due to -Wfatal-errors.
    make: *** [main.o] Error 1
    P.S. La sortie bizarre c'est gcc 4.8

  6. #6
    Membre chevronné

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2007
    Messages
    373
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Santé

    Informations forums :
    Inscription : Juin 2007
    Messages : 373
    Par défaut
    Voilà une implémentation qui fonctionne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    template<typename T, typename ... Args>
    auto make_array(T t, Args ... args) -> std::array<T, sizeof...(Args)+1> {
        return std::array<T, sizeof...(Args)+1>({{t, args...}});
    }
    Il ne te reste plus qu'à écrire la proposition

Discussions similaires

  1. Utilisation de std::function pour créer un bouton
    Par Invité dans le forum SL & STL
    Réponses: 19
    Dernier message: 28/09/2014, 17h12
  2. std::allocator pour char et wchar_t
    Par Meseira dans le forum SL & STL
    Réponses: 6
    Dernier message: 24/04/2013, 14h20
  3. Problème avec std::stringstream pour lire un fichier OBJ
    Par Kromagg dans le forum Développement 2D, 3D et Jeux
    Réponses: 3
    Dernier message: 01/12/2010, 18h49
  4. prédicat pour min_element d'une std::map
    Par Kurisu dans le forum SL & STL
    Réponses: 6
    Dernier message: 11/09/2006, 19h27
  5. [débutant] equivalent à sprintf pour les std::string
    Par Biosox dans le forum SL & STL
    Réponses: 22
    Dernier message: 26/08/2005, 12h46

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo