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