Static opCall for templated structs
Simen Kjaeraas
simen.kjaras at gmail.com
Tue Apr 15 16:01:35 PDT 2008
I often want to offer users a pretty way to create the templated structs I
use, and I find it complexifying to have to place such prettification
outside the struct itself. For instance:
struct foo(T)
{
T data;
static foo!(U) opCall(U)(U u)
{
foo!(U) result;
result.data = u;
return result;
}
}
Seeing as the static opCall is T agnostic, it would be nice to be able to
use it like:
auto f = foo(4);
However, that does of course not work, I need to write:
auto f = foo!(typeof(4))(4);
or place the static opCall outside the struct:
foo!(T) Foo(T)(T t)
{
foo!(T) result;
result.data = t;
return result;
}
struct foo(T)
{
T data;
}
Now, the first workaround is ugly, and the latter requires a different
name for the constructing function, which is not quite as ugly, but still
not as good as it should be.
...I'm starting to think this might be more of a feature request than a
call for help, but oh well.
Is there a way to make this work in current D2.0, so that I can simply use
the first syntax?
--Simen
More information about the Digitalmars-d-learn
mailing list