我正在尝试使用auto
返回类型(C++ 11)进行重载
我已经阅读了C++ 模板运算符重载不同类型,但这并不是我想要做的。
我有这样的课:
template<typename T>
class Attr
{
public:
Attr(const T& v) : value(v) {};
typedef T type;
T value;
}
现在我尝试添加一些返回类型的运算符 ( =
, +
, -
, *
, /
, %
) auto
,所以我在Attr
这段代码中添加:
template<typename U> T& operator=(const U& v){value=v;return value;}; //work
template<typename U>
auto operator+(const U& v) -> std::decltype(Attr<T>::type+v) const //line 29
{
return value+v;
}; //fail
我尝试替换std::decltype(Attr<T>::type+v)
为:
std::decltype(value+v)
std::decltype(Attr<T>::value+v)
std::decltype(T()+v)
而且我也尝试删除const
,但没有改变,我总是有这些错误:
ORM/Attr.hpp:29:47: erreur: expected type-specifier
ORM/Attr.hpp:29:47: erreur: expected initializer
编辑:首先,decltype
不是std
.
它应该是:
template<typename U> auto operator+(const U& v)const -> decltype(value+v) {return value-v;};
最终代码:
template<typename T>
class Attr
{
public:
Attr(const T& v) : value(v) {};
typedef T type;
T value;
template<typename U> auto operator+(const U& v)const -> decltype(value+v) {return value-v;};
}