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 :

Syntaxe pour le placement new dans une fonction


Sujet :

C++

  1. #1
    Membre du Club Avatar de gael21
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2016
    Messages
    44
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

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

    Informations forums :
    Inscription : Mai 2016
    Messages : 44
    Points : 41
    Points
    41
    Par défaut Syntaxe pour le placement new dans une fonction
    Je bloque un peu sur mon apprentissage.

    J'ai implementé une fonction qui ne fait rien d'autre qu'un placement new (juste un return). voici la méthode
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    template<typename T>
    T* CustomNew(T** const i_ptr, const T& Val)
    {
        return new ((void*)*i_ptr) T(Val);
        //return new (*i_ptr) T(Val);
    }
    Et je voudrai appeler ma fonction pour remplacer la ligne avec le new(la ligne commentée).Le problème c'est que je ne sais pas comment faire l'appel de ma fonction dans ce genre de cas.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    T* ptr(nullptr);
    T *amm = nullptr;
    for (i = 0; i < n; ++i)
     {
        auto* ptri = amm + i;
            ptr = CustomNew<T>(&ptri, T()); //nouvelle ligne
            //ptr = new (ptri) T();         //ancienne ligne
     }
    SVP je voiudrai juste savoir comment donner les parametres de ma fonction en locurence le second parametre. En gros, comment la nouvelle ligne devrait être écrite svp

    Merci d'avance

  2. #2
    Expert éminent
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Décembre 2015
    Messages
    1 565
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Décembre 2015
    Messages : 1 565
    Points : 7 648
    Points
    7 648
    Par défaut
    Bonjour,

    Ce que tu veux passer comme paramètre à ton constructeur c'est aucun. Donc tu n'as rien à transmettre à ta fonction :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    template<typename T>
    T* CustomNew( T* const  i_ptr )
    {
        return  new( i_ptr ) T();
    }
    // utilisation :
           ptr = CustomNew<T>( ptri ); //nouvelle ligne
    Si tu veux transmettre des paramètres à ton constructeur, c'est plus compliqué, il faut utiliser les "parameter pack" et les "forwarding reference".
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    template<typename T, typename...Args>
    T* CustomNew( T* const  i_ptr , Args&&  ...args)
    {
        return  new( i_ptr ) T( std::forward<Args>(args)... );
    }
    // utilisation :
           ptr = CustomNew<T>( ptri , 1erParam, 2ndParam );

  3. #3
    Membre du Club Avatar de gael21
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2016
    Messages
    44
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

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

    Informations forums :
    Inscription : Mai 2016
    Messages : 44
    Points : 41
    Points
    41
    Par défaut
    Merci beaucoup
    Le problème c'est que cette fonction prend 2 paramètres pour pouvoir gérer aussi le cas où le second paramètre est utilisé. N'oublions pas qu'il s'agit du placement new. Mon problème c'est que dans le cas précis où le second paramètre n'est pas utilisé, comment je fais?
    Suis-je obligé d'ajouter une nouvelle fonction qui gère ce cas uniquement ?

  4. #4
    Expert éminent
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Décembre 2015
    Messages
    1 565
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Décembre 2015
    Messages : 1 565
    Points : 7 648
    Points
    7 648
    Par défaut
    Je n'ai pas compris de quel paramètres tu parlais.
    La seconde fonction que j'ai indiqué peut être utilisée pour une nombre quelconque de paramètres à passer au constructeur, y compris le cas sans aucun paramètre.
    Par exemple pour le cas où T est std::string:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    std::string*  amm = .......//// allocations pour 3 std::string
    ptr = CustomNew<std::string>( amm + 0 );           // => chaine vide
    ptr = CustomNew<std::string>( amm + 1 , "hello" ); // => chaine "hello"
    ptr = CustomNew<std::string>( amm + 2, 3 , 'c' );  // => chaine "ccc"

  5. #5
    Membre du Club Avatar de gael21
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2016
    Messages
    44
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

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

    Informations forums :
    Inscription : Mai 2016
    Messages : 44
    Points : 41
    Points
    41
    Par défaut
    Merci @dalfa

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

Discussions similaires

  1. Syntaxe pour envoyer un argument dans une fonction
    Par patricktoulon dans le forum Général JavaScript
    Réponses: 10
    Dernier message: 24/05/2014, 12h20
  2. Pour retourner deux valeurs dans une fonction
    Par IMANE21 dans le forum Débuter
    Réponses: 1
    Dernier message: 03/03/2012, 23h36
  3. [XL-2003] Pb pour comparer des chaines dans une fonction
    Par comme de bien entendu dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 22/09/2011, 19h53
  4. Réponses: 2
    Dernier message: 27/07/2007, 16h09
  5. Réponses: 2
    Dernier message: 15/10/2005, 23h29

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