$include_dir="/home/hyper-archives/boost-users/include"; include("$include_dir/msg-header.inc") ?>
From: Ryan Gallagher (ryan.gallagher_at_[hidden])
Date: 2008-04-23 01:06:58
Jeffery Cavallaro <jcavalla <at> google.com> writes:
[...]
> For example, if I wanted to a program to spit out all of its options
> to standard out, there doesn't seem to be any hooks to extract an Any
> value in a generic way (e.g., as a string).
Okay, this isn't exactly generic and only addresses this specific case
for the issue that you brought up, but for program_options where you
normally just have a limited number of types I've used:
...
for ( po::variables_map::const_iterator cur = _options.begin()
, end = _options.end()
; cur != end
; ++cur) {
#define CLI_print_for_type(Type) \
else if (cur->second.value().type() == typeid(Type)) { \
LogKeyValuePair( logger, option_entry_format \
, cur->first \
, boost::any_cast<Type>(cur->second.value())); \
} // end macro definition
if (cur->second.value().type() == typeid(void)) {
logger.Write(str(option_entry_format % cur->first % "<empty>"));
}
CLI_print_for_type(int)
CLI_print_for_type(bool)
CLI_print_for_type(std::string)
else {
logger.Write(str(option_entry_format % cur->first % "<unknown>"));
}
#undef CLI_print_for_type
}
...
-Ryan