digitalmars.D.learn - Overloaded opApply for named template mixin
- Simen Kjaeraas (24/24) Nov 11 2008 Right, I have this:
- Max Samukha (6/28) Nov 12 2008 According to the spec, Aggregate in foreach can be array, class,
- Christian Hartung (24/46) Nov 12 2008 Currently the right way to do this is:
- Simen Kjaeraas (11/30) Nov 12 2008 Ah, but that does not give me the named mixin.
Right, I have this: template foo(T) { int opApply(int delegate(ref T) dg) { // code here } } class bar(T) { mixin foo!(T) baz; } void main() { bar b = new bar(); foreach(qux; bar.baz) { } } And it does not compile. The error I get is "expression has no value", on the line with the foreach. Do I need to do this in a different way, or is it simply not possible (at the moment)? -- Simen
Nov 11 2008
On Wed, 12 Nov 2008 04:57:41 +0100, "Simen Kjaeraas" <simen.kjaras gmail.com> wrote:Right, I have this: template foo(T) { int opApply(int delegate(ref T) dg) { // code here } } class bar(T) { mixin foo!(T) baz; } void main() { bar b = new bar(); foreach(qux; bar.baz) { } } And it does not compile. The error I get is "expression has no value", on the line with the foreach. Do I need to do this in a different way, or is it simply not possible (at the moment)?According to the spec, Aggregate in foreach can be array, class, struct or tuple. I don't know why template instances or mixins with opApply were not included. Hopefully, when foreach is updated to work with ranges, everything that looks like a range will be acceptable.
Nov 12 2008
Em Wed, 12 Nov 2008 01:57:41 -0200, Simen Kjaeraas <simen.kjaras gmail.com> escreveu:Right, I have this: template foo(T) { int opApply(int delegate(ref T) dg) { // code here } } class bar(T) { mixin foo!(T) baz; } void main() { bar b = new bar(); foreach(qux; bar.baz) { } } And it does not compile. The error I get is "expression has no value", on the line with the foreach. Do I need to do this in a different way, or is it simply not possible (at the moment)?Currently the right way to do this is: template foo(T) { int opApply(int delegate(ref T) dg) { // code } } class bar(T) { mixin foo!(T); } void main() { auto b = new bar!(int); foreach(qux; b) { } } -- Usando o revolucionário cliente de e-mail do Opera: http://www.opera.com/mail/
Nov 12 2008
On Wed, 12 Nov 2008 11:37:33 +0100, Christian Hartung <christian.s77 gmail.com> wrote:Currently the right way to do this is: template foo(T) { int opApply(int delegate(ref T) dg) { // code } } class bar(T) { mixin foo!(T); } void main() { auto b = new bar!(int); foreach(qux; b) { } }Ah, but that does not give me the named mixin. Consider class Tree(T) { mixin Traverse!(Stack) depthfirst; mixin Traverse!(Queue) breadthfirst; } -- Simen
Nov 12 2008