【发布时间】:2021-03-01 14:01:16
【问题描述】:
我有一个基于 Poco (v1.9.4) 的课程
class PreprocessingApp : public Poco::Util::Application
使用这两种方法:
void PreprocessingApp::defineOptions(OptionSet& options)
{
Application::defineOptions(options);
options.addOption(
Option("proxy", "p", "Proxify connection")
.required(false)
.repeatable(false)
.argument("the value", false)
.callback(OptionCallback<PreprocessingApp>(this, &PreprocessingApp::handleBooleanOption))
);
options.addOption(
Option("test", "t", "Test something")
.required(true)
.repeatable(false)
.callback(OptionCallback<PreprocessingApp>(this, &PreprocessingApp::handleBooleanOption))
);
}
void PreprocessingApp::handleBooleanOption(const string& name, const string& value)
{
bool actualValue = value.empty() | value == "true" | value == "1";
config().setBool(name, actualValue);
}
如您所见,“代理”是一个布尔选项。我添加了 ".argument("the value", false)" 以允许使用此选项传递参数,但将 "required" 标记为 false 以使其可选。
这样我希望允许这个功能:
PreprocessingApp [-p [value]] -t [value]
两种变体都应该工作:
PreprocessingApp -p -t
PreprocessingApp -p true -t
实际上,在调试handleBooleanOption时,“value”始终为空“”。
切换required为true(.argument("the value", true))时,"value"为"-t",省略next选项处理。
是否有任何解决方案使其按预期工作?
【问题讨论】:
标签: c++ poco-libraries