C++相談室 part23

このエントリーをはてなブックマークに追加
151その1
教科書的な+演算子のオーバーロードです。
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;
}
152その2:03/09/09 21:35
これをテンプレート化すると、うまくいきません。
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;
}
エラー!
153その3:03/09/09 21:36
回避法は下記以外にスマートな方法がありますでしょうか?
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;
}