1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47
| struct UneClasse
{
std::string s_name;
bool s_wildchar;
UneClasse():s_wildchar(false) {}
UneClasse(const std::string & name,bool wildchar):s_name(name),s_wildchar(wildchar) {}
UneClasse(const UneClasse & r):s_name(r.s_name),s_wildchar(r.s_wildchar) {}
UneClasse & operator=(const UneClasse & r)
{ s_name=r.s_name;s_wildchar=r.s_wildchar;return *this; }
bool IsMatching(const std::string & name)
{
if (s_wildchar)
return ::strnicmp(s_name.c_str(),name.c_str(),s_name.length())==0;
else
return ::stricmp(s_name.c_str(),name.c_str())==0;
}
};
struct UneClassePred
{
std::string s_name;
UneClassePred(std::string name):s_name(name) {}
bool operator()(const UneClasse & r)
{
if (r.s_wildchar)
return ::strnicmp(s_name.c_str(),r.s_name.c_str(),r.s_name.length())==0;
else
return ::stricmp(s_name.c_str(),r.s_name.c_str())==0;
}
};
int main(int argc, char* argv[])
{
std::vector<UneClasse> v;
v.push_back(UneClasse("premier",false));
v.push_back(UneClasse("t",true));
v.push_back(UneClasse("second",false));
v.push_back(UneClasse("i",true));
std::vector<UneClasse>::iterator it1=std::find_if(v.begin(),v.end(),UneClassePred(std::string("troisième")));
std::vector<UneClasse>::iterator it2=std::find_if(v.begin(),v.end(),
std::bind2nd(std::mem_fun_ref<UneClasse,std::string>(&UneClasse::IsMatching),std::string("indefini")) // <- erreur compil VC++6.0
);
return 0;
} |
Partager