Thanks everyone, I have ended up going with the list of integers method, not as neat but will work fairly easily
Tim Hughes mailto:[email protected] On Fri, Jan 15, 2010 at 1:55 AM, Mark Slee <[email protected]> wrote: > That won't work properly either, forward declarations are not allowed in > Thrift. > > The reason for this is in the thread David referenced -- Thrift elements are > not nullable because in C++ we store actual objects rather than > references/pointers. > > The simplest thing to do here is probably to simplify the Node object to just > reference domains by id. You probably don't need/want to always incur the > full overhead of storing a full list of rich Domain objects in every Node. > > struct Domain { > 5: Node node; > } > > typedef list<i32> Domains; // Store a list of integer pointers to the Domains > by id > struct Node { > 5: Domains domains; > } > > -----Original Message----- > From: Rory McGuire [mailto:[email protected]] > Sent: Wednesday, January 13, 2010 12:43 AM > To: [email protected] > Subject: Re: Using a type before it has been defined > > You could try this. > > struct Node {} > > struct Domain { > 1: i32 id, > 2: string name, > 3: string hb_time, > 4: i32 state, > 5: Node node, > } > typedef list<Domain> Domains > > struct Node { > 1: i32 id, > 2: string name, > 3: string hb_time, > 4: i32 running_state, > 5: Domains domains, > } > > typedef list<Node> Nodes > typedef i32 IdNum > > service Virt { > Node getNode(1:i32 id), > IdNum saveNode(1:Node node), > Domain getDomain(1:i32 id), > Domains getDomainByNode(1:Node node), > Node getNodeOfDomain(1:i32 id), > Nodes getAllNodes(), > } > > > > On 08 Jan 2010, at 8:28 AM, David Reiss wrote: > >> Short answer: no. See this thread for details: >> http://markmail.org/thread/4pwhw5d254zrphv5 >> >> Tim Hughes wrote: >>> I am wondering if the following concept is possible in some way, >>> other >>> than the way i am doing it obviously. It is a bit recursive and is >>> giving an issue when compiling. The error is: >>> >>> Type "Domains" has not been defined >>> >>> >>> and the thrift code is: >>> >>> struct Node { >>> 1: i32 id, >>> 2: string name, >>> 3: string hb_time, >>> 4: i32 running_state, >>> 5: Domains domains, >>> } >>> >>> >>> struct Domain { >>> 1: i32 id, >>> 2: string name, >>> 3: string hb_time, >>> 4: i32 state, >>> 5: Node node, >>> } >>> >>> typedef list<Domain> Domains >>> typedef list<Node> Nodes >>> typedef i32 IdNum >>> >>> service Virt { >>> Node getNode(1:i32 id), >>> IdNum saveNode(1:Node node), >>> Domain getDomain(1:i32 id), >>> Domains getDomainByNode(1:Node node), >>> Node getNodeOfDomain(1:i32 id), >>> Nodes getAllNodes(), >>> } >>> >>> >>> >>> >>> Tim Hughes >>> mailto:[email protected] > >
