You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.14 01:12:32