0
我有一个模板类,我尝试通过运算符重载为模板verision转换为另一种C++与运算符重载转换模板
enum MyTypes {A,B,C}
template<MyTypes T>
MyClass {
const static MyType type_ = T;
template<MyTypes U>
MyClass<U> convert(MyTypes t) {
MyType<U> ret = MyType<U>();
....
return r;
}
template<MyTypes U>
MyClass<U> operator()() {
return convert(U);
}
}
然而,这种收益率(海合会,C11)
conversion from MyClass<0u> to non-scalar type MyClass<1u> requested
除去模板功能,并试图
MyClass<A> operator()() {
MyClass<A> a = MyClass<A>();
...
return a;
}
抛出
the error operator cannot be overloaded
基本上,我想实现的是,如果我有
MyClass<A> a = MyClass<A>;
MyClass<B> b = a;
它创建基于一个和转换一个新的MyClass的。任何想法这里我的错误是什么?
编辑: 我抛出了一个模板功能,只需留下操作
template<MyTypes U>
MyClass<U> operator()() {
MyClass<U> ret = MyClass<U>();
...
return ret;
}
而是试图做
MyClass<B> = a
'转换(U)'。这里的模板参数是什么?不,这不是'U'。想想看。 –
什么是MyType?什么是'r'?你可以发布[mcve]我们可以复制和粘贴并获得完全相同的错误信息吗? – aschepler
对不起,但是......用'MyType ret = MyType ();'(在'convert()'内部),你的意思是'MyClass r = MyClass ();'? – max66