On Thursday, 18 October 2012 at 11:43:40 UTC, simendsjo wrote:
On Thursday, 18 October 2012 at 11:31:47 UTC, tn wrote:
Hi.
I want to extend math library functions to work with my own
type. However, the definition for my own type seems to prevent
automated access to the original function. How can I fix this
unexpected behavior?
Simplified example:
--------------------
import std.math;
int exp2(int x) {
return 1 >> x;
}
void main() {
assert(exp2(0.0) == 1.0); // <= why does not
this work anymore?
//assert(std.math.exp2(0.0) == 1.0); // <= this works
}
--------------------
You need to manually add std.math.exp2 to the overload set so
importing external methods doesn't hijack your methods:
http://dlang.org/function.html#overload-sets
alias std.math.exp2 exp2;
Thanks, that clarifies quite a lot. Unfortunately my example was
too simplified, as my type is a template.
This still does not work:
--------------------
import std.math;
struct Lognum(T) {
T lx;
}
T log(T)(Lognum!T x) {
return x.lx;
}
alias std.math.log log;
void main() {
//assert(std.math.log(1.0) == 0.0);
assert(log(1.0) == 0.0);
Lognum!double x;
x.lx = 0.0;
assert(log(x) == 0.0);
}
--------------------