增强程序选项和验证功能
Boost Program Options and validate function
我正试图为程序增强选项编写自己的验证函数。然而,我得到:
"抛出'boost::exception_detail::clone_impl>'实例后调用终止What (): boost::bad_any_cast:使用boost::any_cast转换失败"
我看到类似的帖子甚至在这里stackoverflow,但我不能得到工作…下面是我的代码。嗯,我想,不知怎么的,我必须使用lexical_cast并自己编写这个类型转换,但我失败了……
在其中一个头文件中,我有:
enum class LogSeverityLevel : std::int8_t { E_LOG_TRACE = 0,
E_LOG_DEBUG,
E_LOG_INFO,
E_LOG_WARN,
E_LOG_ERROR};
在我的main.cpp文件中:
void validate(boost::any& v,
const std::vector<std::string>& values,
LogSeverityLevel*, int)
{
// Make sure no previous assignment to 'a' was made.
po::validators::check_first_occurrence(v);
// Extract the first string from 'values'. If there is more than
// one string, it's an error, and exception will be thrown.
const std::string& s = po::validators::get_single_string(values);
const std::string& s_capitalized = boost::to_upper_copy(s);
if (s_capitalized== "ERROR") {
v = boost::any(LogSeverityLevel::E_LOG_ERROR);
} else if (s_capitalized == "WARN") {
v = boost::any(LogSeverityLevel::E_LOG_WARN);
} else if (s_capitalized == "INFO") {
v = boost::any(LogSeverityLevel::E_LOG_INFO);
} else if (s_capitalized == "DEBUG") {
v = boost::any(LogSeverityLevel::E_LOG_DEBUG);
} else if (s_capitalized == "TRACE") {
v = boost::any(LogSeverityLevel::E_LOG_TRACE);
} else {
throw po::validation_error(po::validation_error::invalid_option_value);
}
}
,之后在main.cpp:
desc.add_options()
("help,h", "print this help")
("version,v", "show application version")
("log-level", po::value<std::string>()->default_value("DEBUG"), "set log level")
;
然后:
if (vm.count("log-level")) {
setLogSeverityLevel(vm["log-level"].as<LogSeverityLevel>());
>
在定义选项时使用特殊的选项类型而不是字符串:
desc.add_options()
("help,h", "print this help")
("version,v", "show application version")
("log-level", po::value<LogSeverityLevel>()
->default_value(LogSeverityLevel::E_LOG_DEBUG, "DEBUG"), "set log level")
;
相关文章:
- 在执行其他功能的同时播放动画(LED矩阵和Arduino/ESP8266)
- 多态性和功能结合
- 正在尝试了解输入验证循环
- 带内存和隔离功能的SQLite
- 在CMakeLists.txt的安装功能中使用.cmake文件有什么用
- 类模板的成员功能的定义在单独的TU中完全专业化
- 有没有一种方法可以创建一个带有哈希表的数据库,该哈希表具有恒定时间查找功能
- 如何在C++中检查2D数组中负值的输入验证
- 如何在C++中获得"静态纯虚拟"功能?
- 两个文件使用彼此的功能-如何解决
- 我应该实现右值推送功能吗?我应该使用std::move吗
- QML按钮点击功能执行顺序
- LibGit2 SSH身份验证失败
- Vulkan验证层不断在VkQueuePresentKHR()上抛出图像布局错误
- 无法理解此 return 语句的功能,没有它就会发生运行时错误
- “并非所有控制路径都返回一个值./&quot“控制可能达到非空隙功能的末端”.验证时循环时
- CIN验证功能有时不会自动运行
- 如何跟踪LLVM验证功能错误"Expected no forward declarations!"?
- 正在验证功能
- 增强程序选项和验证功能