Esiste un modo per combinare predicati?Combinazione di predicati
Diciamo che ho qualcosa di simile:
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;
}
questo funziona, ma ora mi piacerebbe fare qualcosa di simile:
searchResult = find_if(tokens.begin(), tokens.end(), bind2nd(MatchBeginning(), "-b") || not1(bind2nd(MatchBeginning(), "-")));
Così mi piacerebbe trovare la prima stringa che inizia con "-b" o la prima stringa che non inizia con "-". Tuttavia, questo mi dà un errore (binario '||' indefinito).
C'è un modo per farlo?
Probabilmente avresti bisogno anche di una funzione di shim da compilare: non esiste alcuna inferenza argomento template per le classi. – xtofl
Thx per averlo indicato, ho modificato la risposta e corretto anche un'altra parte ... – gimpf