title: Best practices for storing settings
body: <p>I have a fairly large C++ application (on Windows, no other platforms planned), which currently stores all settings (even some kind of addresses) in the Windows registry.</p>
  
  <p>Sometimes this is inconvenient, because the users have difficulties changing entries in the registry. I would like to have settings versioned, so settings always match the current code. At the moment we version reg-files, but you are never sure, if all reg-files have been added on the target machines. With C# you can define default values in app.config, but don't overwrite existing settings. I don't know, if such a mechanism or library exists for C++.</p>
  
  <p>I would like to have the following "features": </p>
  
  <ul>
  <li>Settings can be versioned</li>
  <li>Simple update on target machines (can be done by user)</li>
  <li>Ensure that on update only new settings are added and no existing settings are overwritten with default values</li>
  <li>Simple change of settings for user</li>
  <li>Same workflow under Win XP and Win 7</li>
  </ul>
  
  <p>As far as I see it, there are 3 possibilities to store settings on Windows:</p>
  
  <ul>
  <li>Registry</li>
  <li>Ini file</li>
  <li>XML file</li>
  </ul>
  
  <p>Only one application of our suite uses Qt at the moment, but Boost would be available.</p>
  
  <p>For addresses, we will put them in some kind of XML address book, but for the other settings we are not sure, what's the best practise.</p>