Под «чистыми» предикатами я подразумеваю, что они только зависят от своих аргументов. Так что следующий функциональный объект является допустимым предикатом для использования, скажем, в std :: sort
// A predicate for sorting objects of type T2 that relies on an
// object of type T1.
class APredicate {
T1 &someObj;
APredicate(T1 &someObject) : someObj(someObject) {};
bool operator() (T2 thing1, T2 thing2) {
return someObj.someFn(thing1) < someobj.someFn(thing2);
}
}
Это когда-либо действительно? Всегда в силе? Или это зависит от того, что фактически делает someObj.SomeFn ()?