Advertisement Jump to content
  • Advertisement
Sign in to follow this  
  • entries
  • comments
  • views

Phase 3, profit

Sign in to follow this  
Jesse Chounard


I've designed a simple interface for classes to add XML access.

class XmlObject
XmlObject(void) { }
virtual ~XmlObject(void) { }
virtual bool ToXml(TiXmlElement&) { return false; }
virtual bool FromXml(TiXmlElement&) { return false; }

Just inherit from XmlObject, and then implement ToXml and FromXml. I thought initially to make the function pure virtual, but there's no reason a class shouldn't just overload the load function, if they don't have any interest in saving. If the save function does get called, it'll just fall down to the base class and return false. No harm done.

I also thought about making the constructor protected, to prevent anyone from allocating XmlObject instead of a derived class. Other than preventing someone from compiling something I can't see any use for, is there any real reason to do it?

A third thought I had was to have a third function, which is a different version of ToXml that returned a TiXmlElement. This would eliminate the need for the calling function to create a TiXmlElement in their scope. Also, two of the utility functions I wrote were overloaded operators for + and +=. If I just return the element, I can do stuff like this:

TiXmlElement xmlSave = class1.ToXml() + class2.ToXml(); 

The problem I have with that, is I really prefer having the option to return a success flag. Most of the code I write for work is in C, so throwing exceptions isn't my first thought when I'm coding on my own. Obviously that's something I need to work past, because exceptions seem to the right way to do handle these error conditions.

I modified my test classes to use this interface, and uploaded the new files. I also remembered to upload the XML file I'm using to test with, as I forgot that last time.


Next time I'll get to the reason I wanted this uniform interface, other than my craving for uniformity.
Sign in to follow this  

1 Comment

Recommended Comments

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
  • Advertisement

Important Information

By using, you agree to our community Guidelines, Terms of Use, and Privacy Policy. is your game development community. Create an account for your GameDev Portfolio and participate in the largest developer community in the games industry.

Sign me up!