Re: Problem with C++ operator for Vector
Toto wrote:
I've got a problem with the redefinition of operator in C++. My intent
is to create a TVector that internally work with __int64, with an
external interface of double in order to optimize the operations. The
double value put in input should be muliplied with factor 1e10, in
order to limit
the loss of precision and divided with the same quantity in output.
To make this, I've supposed to can modify the operator() for the
access at the singular element of a Vector.
My test Vector class is like this
class Vector
{
private:
__int64 *Array;
public:
inline __int64& TVector::operator()(byte Index) {if(Index>FDim) throw
Exception("Out of bound Exception");return
(__int64)Array[Index]*1e10;};
You can't expect it to work on the left side of an assignment operator.
You need something else there. Since you cannot expose the contents of
your 'Array' to the user (as you tried), you need to write proxy classes,
which will have assignment from a double expression and the conversion
from 'double':
struct proxy {
__int64& lvalue;
proxy(__int64& lv) : lvalue(lv) {}
void operator = (double d) {
lvalue = d * 1e10;
}
operator double () {
return lvalue / 1e10;
}
};
struct const_proxy {
__int64 lvalue;
const_proxy(__int64 lv) : lvalue(lv) {}
operator double () {
return lvalue / 1e10;
}
};
and make your Vector return an instance of 'proxy':
const_proxy operator()(byte Index) const {
if (Index >= FDim) throw Exception("...");
return const_proxy(Array[Index]);
}
proxy operator()(byte Index) {
if (Index >= FDim) throw Exception("...");
return proxy(Array[Index]);
}
};
In the program:
double Value = 3.43;
Vector V(3);
V(1) = Value:// Internally V.Array[1] =3.43e10;
V(1)=V(1)+1;
Value = V(1); // Value=4.43;
Obviously the adopted solution does not work as I hope. Please, could
someone help me with any kind of advise? I hope to have explain in
good way the problem.
You have. Now I hope I have explained the solution well.
V
--
Please remove capital 'A's when replying by e-mail
I do not respond to top-posted replies, please don't ask