Fau*_*ult 3 c++ inheritance templates operator-overloading
只是一个简单的问题,如果我有一个模板类:
template <typename T>
class foo {
public:
bool operator!=(foo& other) const {
//...
}
}
Run Code Online (Sandbox Code Playgroud)
然后我继承了所说的课程:
template <typename T>
class bar : public foo<T> {
//...
}
Run Code Online (Sandbox Code Playgroud)
运算符重载是否继承?如果没有,我将如何实现它以便它... ...因为目前在我的测试类中,这会带来一个错误:
for (bar<int> i(baz); i != bar<int>(); i++) {}
Run Code Online (Sandbox Code Playgroud)
++运算符在bar类中实现,因此可以工作,但!=运算符显然不会被继承.错误消息是:
error: no match for 'operator!=' in 'i != bar<int>(0u, 0u)'
note: candidate is: bool foo<T>::operator!=(foo<T>&) const [with T = int]
Run Code Online (Sandbox Code Playgroud)
这几乎总结了我遇到的问题,所以我只是想知道如何继承运算符重载.
您的运算符定义不太正确:
bool operator!=(foo& other) const {
//...
}
Run Code Online (Sandbox Code Playgroud)
应该
bool operator!=(const foo& other) const {
//...
}
Run Code Online (Sandbox Code Playgroud)
因为你试图比较一个临时的,只能绑定到一个const引用.