Le 27/03/10 18:18, so a écrit :
With this in mind, just one thing bugs me.

----
import std.stdio;

struct vector(T) {
this(T m) { mm = m; }
vector!T opBinary(string s)(T m) if(s=="*") {
return vector!T(mm * m);
}
T mm;
}

void test(T)() {
vector!T v = vector!T(0.5);
vector!T u = v * 0.3;
writeln("u: ", u.mm);
}

void main() {
test!float();
test!double();
test!real();
}
-----

This program compiles and runs just fine, but i feel dirty, you see I
explicitly stated that opBinary takes a variable of type T,
but it accepted 0.3 on all 3 tests, implicitly casted double to T. In
C++ world this brings tons of trouble, especially performance problems,

In this case, when is(T==real), you could have a precision problem more than a performance problem. You lose less precision if you always use literals of the most precise type (eg 0.3L).

Performance problems could occur in C++ when your template type is 'long double' (?). But then if 'double' is the most efficient type and if you want performance, use it explictly everywhere.

Reply via email to