用模板化运算符重载XOR运算符失败

时间:2018-10-19 23:58:05

标签: c++

我想对两个值进行Xor运算,一个是空指针,另一个是指向模板类Node的指针,由于我也要这样做多次,所以我不想写{{1 }},所以我写了一个函数为我做。该函数可以正常工作,但是由于某种原因,当我将其设为运算符时,无论我如何调用它(我都尝试过以正常方式调用运算符和函数样式,都给出不同的错误),它将引发编译错误。下面是运算符和函数:

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 found,并且正常的运算符调用表明操作数无效。

这是我给接线员打电话的方式:

Failed to specialize function template 'uintptr_t* operator ^(T,U)'

prev->两者都是指向模板类的指针。

1 个答案:

答案 0 :(得分:2)

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

  

运算符应为非静态成员函数或具有至少一个参数的非成员函数,该参数的类型为类,对类的引用,枚举或对枚举的引用。

涉及其他类型的操作始终遵循内置类型的语义;您不能更改(例如)将运算符应用于一对指针的效果,因为它已经具有含义(至少在运算符为-的情况下),指针和整数,或整数和浮点数。