Why no implicit cast operators?
jerro
a at a.com
Mon Aug 6 06:59:29 PDT 2012
> E.g if I wanted to make a SafeInt struct, that behaves otherwise
> just like an int, but when operators like +=, *=, ++, -- etc are
> used with it, my custom SafeInt operators would check that
> there's no integer overflow.
> If you use alias this to _reveal_
> the internal int value of SafeInt, then that int value's default
> operators are used, and thus no overflow checking.
Wouldn't you have the exact same problem with implicit casts in
C++? If you want to use custom operators, you should just define
those, same as you would in C++. You can even implement just some
operators and use alias this for functionality that you don't
want to reimplement, like this:
import std.stdio;
struct A
{
int a;
alias a this;
auto opOpAssign(string op, T)(T b)
if(op == "+" && is(typeof(a += T.init)))
{
a += b;
writeln("opOpAssign!\"+\" called.");
}
}
void main()
{
auto a = A(3);
a += 5u;
writeln(a);
writeln(a - 1);
}
This prints:
opOpAssign!"+" called.
8
7
More information about the Digitalmars-d
mailing list