gpt4 book ai didi

c++ - 为什么这个 operator< 重载函数对 STL 算法不可见?

转载 作者:行者123 更新时间:2023-12-01 14:13:55 25 4
gpt4 key购买 nike

我学会了重载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因此会抛出异常。现在我只是想编译代码,并保持示例简短。

最佳答案

要被 ADL 找到,您必须将您的运算符放在与类相同的命名空间中:

namespace juce
{
bool operator< (const ValueTree& lhs, const ValueTree& rhs) { /*..*/ }
}

关于c++ - 为什么这个 operator< 重载函数对 STL 算法不可见?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60419904/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com