教科書的な+演算子のオーバーロードです。
class Uint64 {
int var;
public:
Uint64(int i) : var(i) {}
};
Uint64 operator+(const Uint64& lhs, const Uint64& rhs)
{
Uint64 tmp(lhs);
return tmp;
}
int main()
{
Uint64 u = 1;
u = 2 + u;
u = u + 3;
}
これをテンプレート化すると、うまくいきません。
template <typename T> class UINT {
T var;
public:
UINT(int i) : var(i) {}
};
template <typename T> T operator+(const T& lhs, const T& rhs)
{
T tmp(lhs);
return tmp;
}
typedef UINT<int>Uint64;
int main()
{
Uint64 u = 1;
u = 2 + u;
u = u + 3;
}
エラー!
回避法は下記以外にスマートな方法がありますでしょうか?
template <typename T> class UINT {
T var;
public:
UINT(int i) : var(i) {}
UINT operator+(const T& rhs){
T tmp(rhs);
return tmp;
}
};
template <typename T> T operator+(int lhs, const T& rhs)
{
T tmp(lhs);
return tmp;
}
typedef UINT<int>Uint64;
int main()
{
Uint64 u = 1;
u = 2 + u;
u = u + 3;
}