PLists are arbitrary combinations of dictionary, list, and strings.
to encode a string - if its a token (only letters, numbers, and maybe dot) just write it. If it has any other character encode it like a C style string constant (\\n\\r\\t\\ \\"are the main escapes) and put it in double quotes.
to encode a list its ( item1, item2, item3 )
where item[123] is any plist element
to encode a dictionary its { key1 = value1; key2 = value2; }
where key[12] and value[12] is any valid plist element.
Thats it. I have a java class that does this - if you want I can sent it to you and you can port it to C++.
The interface is a stream. PList.write(aPlistObject); and object = PList.read(aStream);
Two functions. Very simple to write. Express any structure in the world. Human readable.