我一直在想是否可以创建一个基类,其中包含子类可以使用的运算符重载。
示例(使用模板):
我自己试过了,但是编译出错了。如果我想这样做,该怎么办?这个可行吗?还是必须使用虚函数和覆盖它(或者其他可能的方法)?
示例(使用模板):
#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);
}
我自己试过了,但是编译出错了。如果我想这样做,该怎么办?这个可行吗?还是必须使用虚函数和覆盖它(或者其他可能的方法)?
错误 C2679: 二进制 'operator':找不到接受右操作数为'type'类型的运算符(或不存在可接受的转换)
编译器:MS Visual C++ 2015
注:请告诉我解决方案是否会使代码变得丑陋。