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

Langage C++ Discussion :

emplace_back sur un vector


Sujet :

Langage C++

  1. #1
    Membre très actif
    Homme Profil pro
    Second de cuisine
    Inscrit en
    Avril 2005
    Messages
    193
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Second de cuisine
    Secteur : Alimentation

    Informations forums :
    Inscription : Avril 2005
    Messages : 193
    Par défaut emplace_back sur un vector
    Bonjour,

    J'essaye de faire un emplace_back sur un vector.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
            static std::vector<portal<net::enable_client>*> container;
    Le constructeur:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
            portal(const std::tuple<d, d, idt, img_id_t, map_item_type_t, idt, idt, force_t, force_t, idt>& t) :
    Le emplace_back:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    container.emplace_back(tools::explode<d, d, idt, img_id_t, map_item_type_t, idt, idt, force_t, force_t, idt>(l, fs2::basic_separator));
    La fonction explode fonctionne très bien, si jamais cela peut aider:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
        template <class... Types>
        std::tuple<Types...> explode(const std::string& str, const char delimiter)
        {
            std::istringstream is(str);
            return variadic::explode_impl<Types...>::call(is, delimiter);
        }


    J'obtient du compilo une ligne rouge...

    /media/data/dev/projects/baws/baws/tools/secure_strings.h|29|warning: deprecated conversion from string constant to ‘char*’ [-Wwrite-strings]|
    /media/data/dev/projects/Servers/handler/inl/player_channel.h||In member function ‘net::handlers::player_channel<Protocol, false>::ret net::handlers::player_channel<Protocol, false>::use_portal(net::session<Protocol>*, net::iopacket::reader&)’
    /media/data/dev/projects/Servers/handler/inl/player_channel.h|108|error: ‘class net::packets::player_channel<false>’ has no member named ‘warp’|
    /usr/include/c++/4.8/bits/alloc_traits.h|254| required from ‘static typename std::enable_if<std::allocator_traits<_Alloc>::__construct_helper<_Tp, _Args>::value, void>::type std::allocator_traits<_Alloc>::_S_construct(_Alloc&, _Tp*, _Args&& ...) [with _Tp = gamedata::portal<true>*; _Args = {std::tuple<double, double, long unsigned int, long unsigned int, short unsigned int, long unsigned int, long unsigned int, double, double, long unsigned int>}; _Alloc = std::allocator<gamedata::portal<true>*>; typename std::enable_if<std::allocator_traits<_Alloc>::__construct_helper<_Tp, _Args>::value, void>::type = void]’|
    /usr/include/c++/4.8/bits/alloc_traits.h|393| required from ‘static decltype (_S_construct(__a, __p, (forward<_Args>)(std::allocator_traits::construct::__args)...)) std::allocator_traits<_Alloc>::construct(_Alloc&, _Tp*, _Args&& ...) [with _Tp = gamedata::portal<true>*; _Args = {std::tuple<double, double, long unsigned int, long unsigned int, short unsigned int, long unsigned int, long unsigned int, double, double, long unsigned int>}; _Alloc = std::allocator<gamedata::portal<true>*>; decltype (_S_construct(__a, __p, (forward<_Args>)(std::allocator_traits::construct::__args)...)) = <type error>]’|
    /usr/include/c++/4.8/bits/vector.tcc|97| required from ‘void std::vector<_Tp, _Alloc>::emplace_back(_Args&& ...) [with _Args = {std::tuple<double, double, long unsigned int, long unsigned int, short unsigned int, long unsigned int, long unsigned int, double, double, long unsigned int>}; _Tp = gamedata::portal<true>*; _Alloc = std::allocator<gamedata::portal<true>*>]’|
    /media/data/dev/projects/gamedata/portal.h|30| required from here|
    /usr/include/c++/4.8/ext/new_allocator.h|120|error: cannot convert ‘std::tuple<double, double, long unsigned int, long unsigned int, short unsigned int, long unsigned int, long unsigned int, double, double, long unsigned int>’ to ‘gamedata::portal<true>*’ in initialization|
    ||=== Build finished: 6 errors, 1 warnings ===|

    Comment fait-on pour faire un joli emplace_back ?

    Merci

    nico

  2. #2
    Membre émérite
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2014
    Messages
    345
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

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

    Informations forums :
    Inscription : Juin 2014
    Messages : 345
    Par défaut
    Bonjour,

    Tu as déclaré un vecteur de pointeurs, donc emplace_back s'attend à ce que tu lui fournisse un pointeur (sur portal<net::enable_client>).
    Peut-être essayer avec un new : truc.emplace_back(new portal(tools::explode<muche, ...>(machin, ...)));

  3. #3
    Membre très actif
    Homme Profil pro
    Second de cuisine
    Inscrit en
    Avril 2005
    Messages
    193
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Second de cuisine
    Secteur : Alimentation

    Informations forums :
    Inscription : Avril 2005
    Messages : 193
    Par défaut
    En effet cette solution compile.
    Mais est ce que j'ai bien les avantages de emplace_back, c'est à dire la construction de l'objet sans la copie/move ?!

  4. #4
    Membre Expert Avatar de Ehonn
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2012
    Messages
    788
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2012
    Messages : 788
    Par défaut
    Oui tu as bien les avantages de la move semantique... sur un pointeur...

  5. #5
    Membre très actif
    Homme Profil pro
    Second de cuisine
    Inscrit en
    Avril 2005
    Messages
    193
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Second de cuisine
    Secteur : Alimentation

    Informations forums :
    Inscription : Avril 2005
    Messages : 193
    Par défaut
    D'accord, merci

  6. #6
    Expert éminent

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 202
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 5 202
    Par défaut
    Je souligne encore:
    Citation Envoyé par Ehonn Voir le message
    sur un pointeur...

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. attribut référence sur un vector
    Par youhil dans le forum SL & STL
    Réponses: 2
    Dernier message: 28/05/2006, 20h27
  2. Question sur les vectors
    Par Pragmateek dans le forum SL & STL
    Réponses: 28
    Dernier message: 13/05/2006, 14h55
  3. Réponses: 15
    Dernier message: 20/09/2005, 09h54
  4. std::sort() sur std::vector()
    Par tut dans le forum SL & STL
    Réponses: 20
    Dernier message: 05/01/2005, 19h15
  5. [debutant STL] question sur les vectors
    Par killerjeff dans le forum SL & STL
    Réponses: 13
    Dernier message: 19/08/2004, 17h32

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