J'ai une fonction générique:Problème boost :: imbrication lambda :: bind-s
void ImageAlbum::ExpressButtonPressed(
boost::function<
void (
thumb::PhotoPrintThumbnail*,
thumb::PhotoPrintFormat,
thumb::PhotoPrintQuantity
)
> memberToCall
) {
...
BOOST_FOREACH(thumb::PhotoPrintThumbnail *pThumbnail, m_thumbs.GetSelected()) {
memberToCall(
pThumbnail,
m_expressSel.GetSelectedFormat(),
m_expressSel.GetSelectedQuantity()
);
}
...
}
je peux appeler avec succès:
ExpressButtonPressed(boost::bind(&thumb::PhotoPrintThumbnail::AddQuantity, _1, _2, _3));
Ensuite, au lieu d'ajouter une quantité d'un certain format à une vignette, je dois les remplacer tous avec un seul format. Plus précisément, avec une liste de 1 élément, comme ça:
ExpressButtonPressed(
boost::lambda::bind(
&thumb::PhotoPrintThumbnail::SetFormats,
_1,
boost::lambda::bind(
boost::lambda::constructor<thumb::PhotoPrintThumbnail::LoadedFormats>(),
1,
boost::lambda::bind(
boost::lambda::constructor<thumb::PhotoPrintThumbnail::LoadedFormat>(),
_2,
_3
)
)
)
);
qui se traduit par « boost/lambda/détail/actions.hpp (96): erreur C2665: « boost :: lambda :: function_adaptor :: apply ': aucune des deux surcharges ne peut convertir tous les types d'arguments ".
Qu'est-ce que je fais mal ici?
BTW
class PhotoPrintThumbnail {
public:
...
typedef std::pair<PhotoPrintFormat, PhotoPrintQuantity> LoadedFormat;
typedef std::list<LoadedFormat> LoadedFormats;
void SetFormats(const LoadedFormats &formats);
Je frémis en pensant que je devrais maintenir votre code un jour ..;) –
Eh bien, ne frémit pas trop, c'est juste mon essayant tout ce truc lambda pour la première fois. A été intéressé jusqu'où je peux le pousser. Très probablement, ne sera jamais commis. –
Quel est le message d'erreur, en particulier les types et leurs paramètres de modèle? – jpalecek