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...