digitalmars.D.learn - template property
- Zarathustra (9/9) Aug 24 2008 Is it possible to create template property without set and get prefixes?
- Christopher Wright (32/43) Aug 24 2008 You're overloading functions inside different templates. That isn't allo...
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)( ); }
Aug 24 2008
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.
Aug 24 2008