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_['&'],"&");
strcpy(enc_['<'],"<");
strcpy(enc_['>'],">");
strcpy(enc_['\''],"'");
strcpy(enc_['"'],""");
}
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...
Partager