¿Hay alguna forma de combinar predicados?Combinación de predicados
Digamos que tengo algo como esto:
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;
}
Esto funciona, pero ahora me gustaría hacer algo como:
searchResult = find_if(tokens.begin(), tokens.end(), bind2nd(MatchBeginning(), "-b") || not1(bind2nd(MatchBeginning(), "-")));
Así que me gustaría encontrar la primera cuerda que comienza con "-b" o la primera cadena que no comienza con "-". Sin embargo, esto me da un error (binario '||' undefined).
¿Hay alguna manera de hacer esto?
Probablemente necesites una función shim para que compile también: no hay inferencia de argumento de plantilla para las clases. – xtofl
Thx para señalar esto, edité la respuesta, y arreglé alguna otra parte también ... – gimpf