D - Another template question
- Chris Sokol (11/11) Aug 07 2003 What am I doing wrong?
- Chris Sokol (2/6) Aug 07 2003 Oops, I meant to say T* fooBar;
- Burton Radons (11/26) Aug 07 2003 Wrong error message, but this is the same thing as doing:
- Chris Sokol (4/5) Aug 07 2003
- Mike Wynn (32/34) Aug 07 2003 I had a play with this .....
- Mike Wynn (36/71) Aug 07 2003 and I tried a couple of other arrangements each has its own unique error
- Chris Sokol (27/49) Aug 08 2003 I have a favorite set of c++ list and tree templates that I did, which I
- Chris Sokol (2/47) Aug 08 2003
What am I doing wrong? template Foo(T) { struct Bar { T fooBar; } } alias instance Foo(Fu) FooT; struct Fu { FooT.Bar x; } no property 'Bar' for type 'instance Foo(Fu )'
Aug 07 2003
On Thu, 07 Aug 2003 23:51:32 -0400, Chris Sokol wrote:template Foo(T) { struct Bar { T fooBar; }Oops, I meant to say T* fooBar;
Aug 07 2003
Chris Sokol wrote:What am I doing wrong? template Foo(T) { struct Bar { T fooBar; } } alias instance Foo(Fu) FooT; struct Fu { FooT.Bar x; } no property 'Bar' for type 'instance Foo(Fu )'Wrong error message, but this is the same thing as doing: struct x { struct y { x xitem; } y yitem; } So it has an infinite size. Use "class" instead, or pointers.
Aug 07 2003
On Fri, 08 Aug 2003 00:35:19 -0400, Burton Radons wrote:So it has an infinite size. Use "class" instead, or pointers.Yeah, I meant to use a pointer. Typo. But that is the error that I get with T* fooBar inside the template.
Aug 07 2003
"Chris Sokol" <chris echosproject.org> wrote in message news:bgv6f0$1mic$1 digitaldaemon.com...What am I doing wrong? no property 'Bar' for type 'instance Foo(Fu )'I had a play with this ..... template Foo(T) { struct Bar { T * fooBar; } } alias instance Foo(Fu).Bar FooT; struct Fu { FooT x; } int main() { Fu f; return 0; } now it reports main.d(7): size of type instance Foo(Fu ).Bar is not known but ................................. template Foo(T) { struct Bar { T * fooBar; } } struct Fu { instance Foo(Fu).Bar x; } int main() { Fu f; return 0; } WORKS
Aug 07 2003
and I tried a couple of other arrangements each has its own unique error .... template Foo(T) { struct Bar { T * fooBar; } } instance Foo(Fu).Bar foo_bar; struct Fu { foo_bar x; } int main() { Fu f; return 0; } //give the error // test_005.d(9): foo_bar is used as a type // template Foo(T) { struct Bar { T * fooBar; } } instance Foo(Fu) foo_fu; struct Fu { foo_fu.Bar x; } int main() { Fu f; return 0; } // gives the error // test_004.d(9): identifier 'Bar' of 'foo_fu.Bar' is not defined // "Mike Wynn" <mike.wynn l8night.co.uk> wrote in message news:bgvbr5$1rmo$1 digitaldaemon.com..."Chris Sokol" <chris echosproject.org> wrote in message news:bgv6f0$1mic$1 digitaldaemon.com...What am I doing wrong? no property 'Bar' for type 'instance Foo(Fu )'I had a play with this ..... template Foo(T) { struct Bar { T * fooBar; } } alias instance Foo(Fu).Bar FooT; struct Fu { FooT x; } int main() { Fu f; return 0; } now it reports main.d(7): size of type instance Foo(Fu ).Bar is not known but ................................. template Foo(T) { struct Bar { T * fooBar; } } struct Fu { instance Foo(Fu).Bar x; } int main() { Fu f; return 0; } WORKS
Aug 07 2003
On Fri, 08 Aug 2003 01:38:41 -0400, Mike Wynn wrote:and I tried a couple of other arrangements each has its own unique error .... template Foo(T) { struct Bar { T * fooBar; } } } instance Foo(Fu).Bar foo_bar; struct Fu { foo_bar x; } } int main() { Fu f; return 0; } } //give the error // test_005.d(9): foo_bar is used as a type //I have a favorite set of c++ list and tree templates that I did, which I want to port to D as a learning experience. They work without performing any allocation; the nodes which are to be placed in the list need to have linkage already present. They go kind of like this: template<typename T> class List { struct Node { T* prev; T* next; }; // all sorts of stuff }; typedef List<struct Element> ElementList; struct Element { ElementList::Node listNode; // blah blah blah }; Is this the proper D-like approach? I definitely do not want to require the List to allocate it's own linkage; one of the things this is used for is implementing malloc / free. Having to do struct Element { instance ListT(Element).Node listNode; }; feels somewhat unweildy; is there no way to something closer to my original example or the typedef approach above?
Aug 08 2003
Ah, thank you. On Fri, 08 Aug 2003 01:30:51 -0400, Mike Wynn wrote:"Chris Sokol" <chris echosproject.org> wrote in message news:bgv6f0$1mic$1 digitaldaemon.com...What am I doing wrong? no property 'Bar' for type 'instance Foo(Fu )'I had a play with this ..... template Foo(T) { struct Bar { T * fooBar; } } } alias instance Foo(Fu).Bar FooT; struct Fu { FooT x; } } int main() { Fu f; return 0; } } now it reports main.d(7): size of type instance Foo(Fu ).Bar is not known but ................................. template Foo(T) { struct Bar { T * fooBar; } } } struct Fu { instance Foo(Fu).Bar x; } } int main() { Fu f; return 0; } } WORKS
Aug 08 2003