Я научился перегружать operator<
, чтобы сделать пользовательские классы совместимыми с алгоритмами STL, вот так:
struct A
{ int a; };
bool operator< (const A& x, const A& y)
{ return x.a < y.a; }
std::vector<A> aOne, aTwo, aResult;
std::set_difference(aOne.begin(), aOne.end(),
aTwo.begin(), aTwo.end(),
std::inserter(aResult, aResult.begin()));
Однако, когда я пытаюсь сделать то же самое с Объект ValueTree из библиотеки JUCE не работает:
bool operator< (const juce::ValueTree& x, const juce::ValueTree& y)
{
// let's now worry about the implementation of this function here...
return true;
}
std::vector<juce::ValueTree> vOne, vTwo, vResult;
std::set_difference(vOne.begin(), vOne.end(),
vTwo.begin(), vTwo.end(),
std::inserter(vResult, vResult.begin()));
// COMPILER ERROR: Failed to specialize function template 'unknown-type std::less<void>::operator ()(_Ty1 &&,_Ty2 &&) const'
Кто-нибудь может увидеть, что не так с моей функцией operator<
?
Я знаю, что ответ, вероятно, связан с внутренней работой ValueTree
, и что поэтому это несовершенный вопрос. Но я понятия не имею о типе , который мог бы пойти не так. На мой взгляд, эти два случая кажутся полностью симметричными, поэтому я не знаю, почему один из них потерпит неудачу, а другой преуспеет.
Обратите внимание: я знаю, что я оставил свои массивы несортированными, и что set_difference
поэтому выкинул бы исключение. Прямо сейчас я просто пытаюсь получить код для компиляции и держу пример кратким.