我正在尝试继承一个结构以添加一个 += 运算符。
这段代码看起来是对的,但它无法编译,我从编译器得到的只是:
语法错误:在 '<' 之前缺少 ','
请参阅对正在编译的类模板实例化 'Test' 的引用
struct plus_equals
{
template<typename T, typename S>
struct operator_type
{
S& operator+=(const T &other)
{
S* super = (S*)this;
super->value += other;
return *super;
}
};
};
template<typename T, typename OP>
struct Test : OP::operator_type<T, Test<T, OP>> // error on this line
{
T value;
Test(T val) : value(val){}
};
int main(int argc, char *argv[])
{
Test<int, plus_equals> test(123);
test += 456;
cout << test.value << endl;
return 0;
}
我很困惑为什么下面的代码会编译,但上面的代码不会。
template<typename T>
struct Something
{
T GetT() { return T(); }
};
class Test : public Something<Test>
{
//...
};