Existe-t-il un moyen de combiner des prédicats?Combinaison de prédicats
Disons que j'ai quelque chose comme ceci:
class MatchBeginning : public binary_function<CStdString, CStdString, bool>
{ public:
bool operator()(const CStdString &inputOne, const CStdString &inputTwo) const
{ return inputOne.substr(0, inputTwo.length()).compare(inputTwo) == 0; }
};
int main(int argc, char* argv[])
{
CStdString myString("foo -b ar -t az");
vector<CStdString> tokens;
// splits the string every time it encounters a "-"
split(myString, tokens, "-", true, true);
vector<CStdString>::iterator searchResult = find_if(tokens.begin(), tokens.end(), not1(bind2nd(MatchBeginning(), "-")));
return 0;
}
Cela fonctionne, mais maintenant je voudrais faire quelque chose comme:
searchResult = find_if(tokens.begin(), tokens.end(), bind2nd(MatchBeginning(), "-b") || not1(bind2nd(MatchBeginning(), "-")));
Je voudrais trouver la première chaîne cela commence par "-b" ou la première chaîne qui ne commence pas par "-". Cependant, cela me donne une erreur (binaire '||' indéfini).
Y at-il un moyen de le faire?
Vous auriez probablement besoin d'une fonction shim pour compiler aussi: il n'y a pas d'inférence d'argument de template pour les classes. – xtofl
Thx pour le signaler, j'ai édité la réponse, et ai corrigé une autre partie aussi ... – gimpf