由于某种原因,我有两个类使用模板实现运算符"+"(我这样做是因为我希望这两个类的所有子节点都能够使用它).
我已经找到了一个非常简单的代码来实现我想要使用的东西:
#include <type_traits>
class A{};
template<typename T>
A operator+(T& lhs,int rhs){
static_assert(std::is_base_of<A, T>::value, "T must inherit from A");
A to_return;
return to_return;
}
class B{};
template<typename T>
B operator+(T& lhs,int rhs){
static_assert(std::is_base_of<B, T>::value, "T must inherit from B");
B to_return;
return to_return;
}
int main()
{
A u;
A v = u+1;
}
Run Code Online (Sandbox Code Playgroud)
编译时,编译器(g ++或intel)返回以下错误:
g ++:main.cpp:25:11:错误:'u + 1'main.cpp中的'operator +'的模糊重载:25:11:注意:候选者是:main.cpp:6:3:注意:运算符+( T&,int)[with T = A] main.cpp:15:3:注意:B运算符+(T&,int)[T = A]
icpc:main.cpp(25):错误:多个运算符"+"匹配这些操作数:函数模板"运算符+(T&,int)"函数模板"B运算符+(T&,int)"操作数类型是: A + int A v = u + 1; ^
虽然它不是那么模糊,因为v应该是A类型,所以只有第一个模板才能工作. …