本文整理汇总了C++中Options::SetOptionValue方法的典型用法代码示例。如果您正苦于以下问题:C++ Options::SetOptionValue方法的具体用法?C++ Options::SetOptionValue怎么用?C++ Options::SetOptionValue使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类Options
的用法示例。
在下文中一共展示了Options::SetOptionValue方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: switch
Error
Args::ParseOptions (Options &options)
{
StreamString sstr;
Error error;
struct option *long_options = options.GetLongOptions();
if (long_options == NULL)
{
error.SetErrorStringWithFormat("Invalid long options.\n");
return error;
}
for (int i=0; long_options[i].name != NULL; ++i)
{
if (long_options[i].flag == NULL)
{
sstr << (char)long_options[i].val;
switch (long_options[i].has_arg)
{
default:
case no_argument: break;
case required_argument: sstr << ':'; break;
case optional_argument: sstr << "::"; break;
}
}
}
#ifdef __GLIBC__
optind = 0;
#else
optreset = 1;
optind = 1;
#endif
int val;
while (1)
{
int long_options_index = -1;
val = ::getopt_long(GetArgumentCount(), GetArgumentVector(), sstr.GetData(), long_options,
&long_options_index);
if (val == -1)
break;
// Did we get an error?
if (val == '?')
{
error.SetErrorStringWithFormat("Unknown or ambiguous option.\n");
break;
}
// The option auto-set itself
if (val == 0)
continue;
((Options *) &options)->OptionSeen (val);
// Lookup the long option index
if (long_options_index == -1)
{
for (int i=0;
long_options[i].name || long_options[i].has_arg || long_options[i].flag || long_options[i].val;
++i)
{
if (long_options[i].val == val)
{
long_options_index = i;
break;
}
}
}
// Call the callback with the option
if (long_options_index >= 0)
{
error = options.SetOptionValue(long_options_index,
long_options[long_options_index].has_arg == no_argument ? NULL : optarg);
}
else
{
error.SetErrorStringWithFormat("Invalid option with value '%i'.\n", val);
}
if (error.Fail())
break;
}
// Update our ARGV now that get options has consumed all the options
m_argv.erase(m_argv.begin(), m_argv.begin() + optind);
UpdateArgsAfterOptionParsing ();
return error;
}