【发布时间】:2013-11-10 01:39:25
【问题描述】:
我正在尝试继承结构以添加 += 运算符。
这段代码看起来是对的,但编译失败,我从编译器得到的只是:
语法错误:在 ' 之前缺少 ',' 请参阅正在编译的类模板实例化“测试”的参考
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>
{
//...
};
【问题讨论】:
-
我想你的意思可能是:template
S& operator+=(const U &other),但这并不能解决问题。 -
这在 llvm 中为我编译:
struct Test : OP::template operator_type<T, Test<T, OP> >你指出你得到了错误。 -
哦..哇。我以前从未见过模板的用法,但它确实可以编译(vs2013)。如果你回答,我会接受。谢谢
-
如果您知道如何将 Test 更改为可变参数模板并且仍然可以使用...那也太好了 =)