gpt4 book ai didi

c++ - 模板化类如何解析在其类型之一上调用的重载非成员函数?

转载 作者:行者123 更新时间:2023-12-02 10:36:35 25 4
gpt4 key购买 nike

在以下示例中,我为任意类型创建了一个模拟 Container 类。在 Container 上调用 compare() 会为存储在其中的 Value 对象调用 compare()。在 Container<Value> 中如何解决为 Value 重载的 compare() 函数当它在之后声明并且不是 Value 的成员函数时?

代码:

template<typename T>
class Container
{
public:
Container(T value) : element(value) {}
T element;
};

template<typename T>
int compare(Container<T> const& first, Container<T> const& second)
{
return compare(first.element, second.element);
}

class Value
{
public:
Value(int value) : value(value) {}
int value;
};

int compare(Value const& first, Value const& second)
{
if (first.value < second.value)
return -1;
else if (first.value > second.value)
return 1;
return 0;
}

int main()
{
auto l1 = Container<Value>(1);
auto l2 = Container<Value>(1);
auto l3 = Container<Value>(2);

cout << compare(l1, l2) << endl;
cout << compare(l1, l3) << endl;
}

输出(如预期):
0
-1

最佳答案

模板只有在实例化时才会得到解析,因此您的 compare Value方法只需要在 main 之前声明不早于您 compare Container方法

关于c++ - 模板化类如何解析在其类型之一上调用的重载非成员函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60014805/

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