C++ 模板参数和运算符重载
我想用模板参数重载模板类中的相等运算符。守则:C++ 模板参数和运算符重载,c++,templates,operator-overloading,C++,Templates,Operator Overloading,我想用模板参数重载模板类中的相等运算符。守则: template <typename TObj, template<typename T> class TDerived> class A; template <typename TObjL, template<typename T> class TDerivedL, typename TObjR, template<typename T> class TDerivedR> bool o
template <typename TObj, template<typename T> class TDerived>
class A;
template <typename TObjL, template<typename T> class TDerivedL, typename TObjR, template<typename T> class TDerivedR>
bool operator==(const A<TObjL, TDerivedL>& l, const A<TObjR, TDerivedR>& r)
{
return true;
}
template <typename TObj, template<typename T> class TDerived>
class A
{
template <typename TObjL, template<typename T> class TDerivedL, typename TObjR, template<typename T> class TDerivedR>
friend bool operator==(const A<TObjL, TDerivedL>& l, const A<TObjR, TDerivedR>& r);
};
template <typename TObj>
class B: public A<TObj, B>
{
};
int main()
{
B<int> b1, b2;
b1==b2;
return 0;
}
模板
甲级;
模板
布尔运算符==(常数A&l、常数A&r)
{
返回true;
}
模板
甲级
{
模板
友元布尔运算符==(常数A&l,常数A&r);
};
模板
B类:公共A
{
};
int main()
{
B b1,b2;
b1==b2;
返回0;
}
编译器拒绝编译此代码,这给了我一个错误:“operator==”的不明确重载。当我用类型参数替换所有模板参数时(例如,只保留
类TDerived
),没有错误。为什么会发生此错误?在此类类中重载运算符的正确方法是什么?,我认为没有理由不编译此类。我们在这里讨论的是哪个编译器?@T.C.我使用的是gcc 4.8.2和3.4.2。那么,听起来像是一个gcc错误。