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

Boost C++ Discussion :

Lambda Ancienne BOOST


Sujet :

Boost C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Candidat au Club
    Inscrit en
    Avril 2008
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 3
    Par défaut Lambda Ancienne BOOST
    Bonjour, je me bat actuellement avec un code en cour de refactoring qui utilise une vieille boost... trèèèèèèèès vieille (1.31) [pas le choix].

    J'aimerais savoir si mon utilisation du Lambda est incorrect où si c'est la version de boost.

    class EncodeXml
    {
    public:
    EncodeXml();

    // unencoded char -> encoded string
    const char* operator ()(char toEncode) const;

    private:
    char enc_[256][7];
    };

    //-------------

    EncodeXml::EncodeXml()
    {
    // initialise
    for(int idx(0);idx<256;idx++)
    {
    enc_[idx][0]=static_cast<char>(idx);
    enc_[idx][1]='\0';
    }

    // replace unencoded char to encoded string
    strcpy(enc_['&'],"&amp;");
    strcpy(enc_['<'],"&lt;");
    strcpy(enc_['>'],"&gt;");
    strcpy(enc_['\''],"&apos;");
    strcpy(enc_['"'],"&quot;");
    }

    const char*
    EncodeXml::operator ()(char toEncode) const
    {
    return enc_[toEncode];
    }

    //---------------------------

    const std::string
    foo::encodeValue(const std::string& value)
    {
    static EncodeXml enc;
    std::stringstream out;
    std::for_each(value.begin(), value.end(),
    out << boost::bind<const char*>(enc, boost::lambda::_1))
    return out.str();
    }


    J'ai tout tenté, boost::ref(enc), de passer le stream en structure avec operator() etc...

    j'ai toujours une erreur de compilation qui se balade.
    Là en l'occurrence, malgré le <const char*>, le compilateur (sous VS2003) tente d'envoyer boost::_bi::bind dans le stream !!!

    HEEEEEEELP j'craque...

  2. #2
    Candidat au Club
    Inscrit en
    Avril 2008
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 3
    Par défaut
    ps : a oui, c'est un extrait du code car bien plus complexe et trop long, ne pas faire gaffe aux ';' manquant, désolé.

  3. #3
    Expert confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2003
    Messages
    3 549
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

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

    Informations forums :
    Inscription : Décembre 2003
    Messages : 3 549
    Par défaut
    Tu m'as tout l'air de mélanger boost::bind et boost::lambda.

  4. #4
    Membre Expert

    Profil pro
    Inscrit en
    Juin 2006
    Messages
    1 294
    Détails du profil
    Informations personnelles :
    Localisation : Royaume-Uni

    Informations forums :
    Inscription : Juin 2006
    Messages : 1 294
    Par défaut
    Salut,

    Citation Envoyé par Spouick Voir le message
    Là en l'occurrence, malgré le <const char*>, le compilateur (sous VS2003) tente d'envoyer boost::_bi::bind dans le stream !!!
    En même temps c'est bien ce que tu lui demandes de faire là :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    out << boost::bind<const char*>(enc, boost::lambda::_1)
    MAT.

  5. #5
    Expert confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2003
    Messages
    3 549
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

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

    Informations forums :
    Inscription : Décembre 2003
    Messages : 3 549
    Par défaut
    Les éléments de std::string sont des char, pas des const char*...

Discussions similaires

  1. boost phoenix vs lambda c1x
    Par guillaume07 dans le forum Boost
    Réponses: 27
    Dernier message: 22/12/2010, 14h04
  2. Pb avec boost::lambda
    Par vandamme dans le forum Boost
    Réponses: 3
    Dernier message: 11/06/2009, 14h21
  3. boost.lambda et comparaison case insensitive
    Par nikko34 dans le forum Boost
    Réponses: 2
    Dernier message: 27/03/2008, 19h23
  4. Utilisation de Boost.Lambda
    Par Biozic dans le forum Boost
    Réponses: 9
    Dernier message: 25/02/2008, 00h10
  5. boost lambda : appels imbriqués
    Par Patriarch24 dans le forum Boost
    Réponses: 3
    Dernier message: 24/09/2007, 15h02

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