gpt4 book ai didi

c++ - 使用模板化运算符重载 XOR 运算符失败

转载 作者:行者123 更新时间:2023-11-28 01:28:10 26 4
gpt4 key购买 nike

我想对两个值进行异或运算,一个是空指针,一个是指向模板类 Node 的指针,而且由于我也会多次这样做,所以我不想写出来reinterpret_cast 所有这些,所以我写了一个函数来为我做这件事。该函数工作正常,但出于某种原因,当我将其设为运算符时,无论我如何调用它(我已经尝试了调用运算符和函数样式的正常方法,都给出了不同的错误)它会抛出编译错误。下面是运算符和函数:

template<typename T, typename U, typename = typename std::enable_if<(std::is_pointer<T>::value || std::is_null_pointer<T>::value) && (std::is_pointer<U>::value || std::is_null_pointer<U>::value)>::type>
uintptr_t* operator^(T left, U right)
{
return reinterpret_cast<uintptr_t*>(reinterpret_cast<uintptr_t>(left) ^ reinterpret_cast<uintptr_t>(right));
}

template<typename T, typename U, typename = typename std::enable_if<(std::is_pointer<T>::value || std::is_null_pointer<T>::value) && (std::is_pointer<U>::value || std::is_null_pointer<U>::value)>::type>
uintptr_t* XorPtr(T left, U right)
{
return reinterpret_cast<uintptr_t*>(reinterpret_cast<uintptr_t>(left) ^ reinterpret_cast<uintptr_t>(right));
}

同样,函数工作正常,但运算符抛出错误。当调用函数样式时,它给出错误 "^": no matching overloaded function foundFailed to specialize function template 'uintptr_t* operator ^(T,U)' 和正常的运算符调用表明操作数无效。

这里是我调用操作符的方式:

operator^(nullptr, prev->both);
nullptr ^ prev->both;

其中 prev->both 是指向模板类的指针。

最佳答案

您没有定义运算符重载,因为您不符合定义:

An operator function shall either be a non-static member function or be a non-member function that has at least one parameter whose type is a class, a reference to a class, an enumeration, or a reference to an enumeration.

涉及除这些之外的类型的操作始终遵循内置类型的语义;您无法更改(例如)将运算符应用于一对指针的效果,因为它已经具有意义(至少,如果运算符是 -),或者一个指针和一个整数, 或一个整数和一个 float 。

关于c++ - 使用模板化运算符重载 XOR 运算符失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52901232/

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