-----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 Frank Birbacher wrote:
Hi!
Rupert Bruce schrieb:
So anywhere in my code I can do, for example: if (PropertyCatalog::getBooleanProperty("testapp.profile",false)) { profile.append(currentStatus); }
Which has a design flaw, I think. I just got rid of a lot of such function calls in a project I'm working at. The flaw: do not keep configuration default values distributed in the code. What if the default value needs to change? It does commonly change for directory paths. If you now tell me to always write the correct value into the config file, then I wouldn't need any default value at all and I could just remove them. And if you need different default values for the same key in different places, then you simply need also different keys.
I now have "getConfig" calls without defaults in the call.
Frank
_______________________________________________ Boost-users mailing list Boost-users@lists.boost.org http://lists.boost.org/mailman/listinfo.cgi/boost-users
Personally, I like the defaults (I typically replace a hard-coded value in the code with a call to PropertyCatalog so the default is obvious). One advantage of Polymorphism is that I don't need to specify a default: PropertyCatalog::getBooleanProperty("testapp.profile") As you mention, file paths are a common default that changes - one that I frequently have to override on the command line is the path to the config file itself. One benefit of boost::program_options is that I have that flexibility. This is from a test case with no properties: int main(int argc, char *argv[]) { PropertyCatalog::populate(argc, argv); string log_config_file=PropertyCatalog::getStringProperty("config.logging", "../config/log4cxx.properties"); log4cxx::PropertyConfigurator::configure(LOG4CXX_FILE(log_config_file)); if (PropertyCatalog::isDefined("help")) { PropertyCatalog::logPropertyCatalog(); } return UnitTest::RunAllTests(); } void PropertyCatalog::populate(int argc, char **argv) { options_description general("General options"); general.add_options() ("help", "produce a help message") ("config", value<string>(),"override the default config file name") ("version", "output the version number"); string defaultConfigFileName = static_cast<string>(argv[0])+".properties"; string config_file=PropertyCatalog::getStringProperty("config", defaultConfigFileName); options_description cmdline_options; cmdline_options.add(general); options_description config_file_options; config_file_options.add(general); //class variable 'visible' holds the set of option_descriptions that the user //may want to have listed via logPropertyCatalog() visible.add(general); store(parse_command_line(argc, argv, cmdline_options), vm); //load the config file ifstream ifs(config_file.c_str()); store(parse_config_file(ifs, config_file_options), vm); notify(vm); } -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.7 (GNU/Linux) Comment: Using GnuPG with Fedora - http://enigmail.mozdev.org iD8DBQFIOC5D/X5Z5iyVCbERAoHPAJ9/p/GNwuLHpZh2yBiqlyp+WbrEaQCdFMIZ yvAtqhEkkaRRrB7ojhSe9Lw= =Pu8n -----END PGP SIGNATURE-----