我有两个结构:
template <typename T> struct Odp { T m_t; T operator=(const T rhs) { return m_t = rhs; } }; struct Ftw : public Odp<int> { bool operator==(const Ftw& rhs) { return m_t == rhs.m_t; } };
我希望以下内容能够编译:
int main() { Odp<int> odp; odp = 2; Ftw f; f = 2; // C2679: no operator could be found }
有没有办法使这项工作,或者我必须在Ftw中定义运算符?
解决方法
问题是编译器通常为你创建一个operator =(除非你提供一个),而这个operator =隐藏了继承的一个.您可以通过使用声明来推翻这一点:
struct Ftw : public Odp<int> { using Odp<int>::operator=; bool operator==(const Ftw& rhs) { return m_t == rhs.m_t; } };