【发布时间】:2016-08-09 05:22:53
【问题描述】:
我一直在问自己是否有可能创建一个具有子类可以使用的运算符重载的基类。
示例(带模板):
#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:二进制“运算符”:找不到运算符 'type' 类型的右手操作数(或者没有可接受的 转换)
编译器:MS Visual C++ 2015
PS:请告诉我解决方案是否使代码变得丑陋。
【问题讨论】:
-
包含您得到的 exact 编译器错误通常是个好主意。还包括编译器名称和版本。
标签: c++ c++11 assignment-operator