tis*_*der 3 c++ assignment-operator c++11
我一直在问自己是否有可能创建一个基类,它具有子类可以使用的运算符重载.
示例(使用模板):
#include <cassert>
template<typename T>
struct Base {
T value {};
Base& operator=(const T& newVal) { this->value = newVal; return *this; }
};
template<typename T>
struct Child : Base<T> {
};
int main() {
Child<int> ch {};
assert(ch.value == 0);
ch = 10; // compilation error here
assert(ch.value == 10);
}
Run Code Online (Sandbox Code Playgroud)
我自己尝试使用编译错误.如果我想这样做,我该怎么办?这甚至是可能的还是我必须使用虚拟并覆盖它(或任何可能的)?
错误C2679:二进制'运算符':找不到哪个运算符采用了'type'类型的右手操作数(或者没有可接受的转换)
编译器:MS Visual C++ 2015
PS:请告诉我解决方案是否使代码变得丑陋.
Ker*_* SB 10
每个班级都宣布一个operator=.如果不显式执行,则隐式声明运算符.该(可能是隐含的)声明隐藏了基本成员.要取消隐藏它,您需要使用using声明:
template <typename T>
struct Child : Base<T>
{
using Base<T>::operator=;
};
Run Code Online (Sandbox Code Playgroud)