Je suis un novice dans l'utilisation des algorithmes STL et je suis actuellement bloqué sur une erreur de syntaxe. Mon objectif global est de filtrer la liste des sources comme si vous utilisiez Linq dans C#. Il peut y avoir d'autres façons de faire cela en C++, mais j'ai besoin de comprendre comment utiliser les algorithmes.Syntaxe pour l'utilisation de la fonction std :: binary_function
Mon objet de fonction définie par l'utilisateur à utiliser comme mon adaptateur de fonction est
struct is_Selected_Source : public std::binary_function<SOURCE_DATA *, SOURCE_TYPE, bool>
{
bool operator()(SOURCE_DATA * test, SOURCE_TYPE ref)const
{
if (ref == SOURCE_All)
return true;
return test->Value == ref;
}
};
Et dans mon programme principal, je l'utilise comme suit: -
typedef std::list<SOURCE_DATA *> LIST;
LIST; *localList = new LIST;;
LIST* msg = GLOBAL_DATA->MessageList;
SOURCE_TYPE _filter_Msgs_Source = SOURCE_TYPE::SOURCE_All;
std::remove_copy(msg->begin(), msg->end(), localList->begin(),
std::bind1st(is_Selected_Source<SOURCE_DATA*, SOURCE_TYPE>(), _filter_Msgs_Source));
Ce que je veux la erreur suivante dans Rad Studio 2010. L'erreur signifie "Votre fichier source utilisait un symbole typedef dans lequel une variable devait apparaître dans une expression."
« E2108 Une mauvaise utilisation de typedef « is_Selected_Source » »
Edition - Après avoir fait plus d'expérimentation dans VS2010, qui a un meilleur diagnostic du compilateur, j'ai trouvé le problème est que la définition de remove_copy permet uniquement des fonctions uniary. Je change la fonction en uniary et je l'ai fait fonctionner.
Votre réponse initiale a résolu la plupart de mes problèmes, cependant, maintenant je compile - E2034 Impossible de convertir 'const SOURCE_TYPE' en 'SOURCE_DATA *' –
Peut être plus simple de faire une nouvelle question avec le code révisé et le message d'erreur. Il peut être un peu déroutant quand un seul thread est utilisé pour résoudre plusieurs problèmes sur une période de temps :) – Cogwheel
À première vue, cependant, il semble que vous instanciez la fonction binaire avec les mauvais arguments. Peut-être que vous passez le type de pointeur en paramètre quand vous devriez juste passer le type de base? (le modèle is_Selected_Source gère la conversion en pointeur) – Cogwheel