Inferring function argument types from other argument types
Ali Çehreli
acehreli at yahoo.com
Tue Nov 13 09:47:15 PST 2012
On 11/12/2012 06:55 AM, Joseph Rushton Wakeling wrote:
> I'm just curious
> if there is any other way to meaningfully determine the type of one
> function argument based on the type of another. Hence the playing with
> different template argument formulations.
>
> It just feels really difficult to believe that the generic programming
> in D doesn't extend to allowing you to infer one argument type based on
> another.
I am pretty sure that should work according to spec under "Argument
Deduction":
http://dlang.org/template.html
"
2. If the type specialization is dependent on a type parameter, the type
of that parameter is set to be the corresponding part of the type argument.
"
struct Foo(_T1, _T2)
{
alias _T1 T1;
T1 t1;
}
void foo(T)(T foo, T.T1 x) // <-- Note T.T1
{
return func2(x);
}
void main()
{
auto f = Foo!(size_t, string)();
foo(f, 42);
}
Although, there is the issue of compiler's not being sure whether the T1
in T.T1 is a typename or a member variable. (That's why the 'typename'
keyword is used in such contexts in C++.)
Still, please create a bug report: :)
http://d.puremagic.com/issues/
Ali
More information about the Digitalmars-d-learn
mailing list