August 24, 2008 template property | ||||
---|---|---|---|---|
| ||||
Is it possible to create template property without set and get prefixes? public TResult value/* setValue */(TResult = char[])(TResult o_value){ return this.SetValue!(TResult)(o_value); } public TResult value/* getValue */(TResult = char[])( ){ return this.GetValue!(TResult)( ); } |
August 24, 2008 Re: template property | ||||
---|---|---|---|---|
| ||||
Posted in reply to Zarathustra | Zarathustra wrote: > Is it possible to create template property without set and get prefixes? > > public TResult value/* setValue */(TResult = char[])(TResult o_value){ return this.SetValue!(TResult)(o_value); } > > public TResult value/* getValue */(TResult = char[])( ){ return this.GetValue!(TResult)( ); } You're overloading functions inside different templates. That isn't allowed. If you can come up with a guard value for each type you use, you could do: TResult value (TResult = char[]) (TResult o_value = GuardValue!(TResult)) { if (o_value !is GuardValue!(TResult)) { return this.SetValue!(TResult)(o_value); } else { return this.GetValue!(TResult)(); } } Or you could use varargs: TResult value (TResult = char[]) (TResult[] o_values...) { if (o_values.length) { return this.SetValue!(TResult)(o_values[0]); } else { return this.GetValue!(TResult)(); } } auto value1 = obj.value!(Object); obj.value = 1; // don't know whether IFTI works with this syntax Or you could put the overloads inside the same template, but then you'd have to call it as: auto value = obj.value!(type).value; I'd probably use varargs, if it works. |
Copyright © 1999-2021 by the D Language Foundation