如何在argparse中使用整数参数?解决std::bad_any_cast异常
解决argparse中std::bad_any_cast异常的问题
你碰到的std::bad_any_cast异常,根源是argparse默认会把所有命令行参数解析成std::string类型——哪怕你传入的是数字,不指定类型的话,内部存储的还是字符串,直接用get<int>转换必然失败。
修复方法很简单,在添加--port参数时,通过.scan()方法显式指定要解析的整数类型,修改后的代码如下:
argparse::ArgumentParser argument_parser("program name"); argument_parser.add_argument("--port") .help("port number") .required() .scan<'i', int>(); // 显式指定将参数解析为int类型 argument_parser.parse_args(argc, argv); const auto port_number = argument_parser.get<int>("port");
.scan<'i', int>()会告诉argparse把输入的字符串参数扫描转换为int类型,后续调用get<int>就能正确获取到整数,不会再触发类型转换异常。
如果需要处理无符号整数、长整数等其他数值类型,也可以用对应的格式符,比如'u'对应unsigned int,'l'对应long类型。
内容的提问来源于stack exchange,提问作者user2138149
相关产品推荐
相关产品推荐

