gpt4 book ai didi

c++ - Boost program_options 异常不替换 %canonical_option% 标签

转载 作者:可可西里 更新时间:2023-11-01 15:02:28 34 4
gpt4 key购买 nike

已将此(版本 1.52.0)集成到我的应用程序中,但偶然发现了上述问题。

在附加的示例中,异常 what() 方法始终保持完好无损的 %canonical_option% 标签,并且不会替换为我的选项名称。

我正在使用 VS2008,禁用了 unicode(选项“无”)并从我的项目中删除了所有其他文件,main.cpp 文件中只有这段代码。

还是我把这一切都弄错了,我应该调用其他东西来用正确的参数名称格式化异常消息?

#include <boost/program_options.hpp>

namespace po = boost::program_options;

using namespace std;

int main(int argc, char* argv[])
{

try {

po::options_description optionalParams("optional");

optionalParams.add_options()
("log_severity,l", po::value<int>()->required(), "Minimum severity logging level")
("log_file,g", po::value<string>(), "Full path to log file")
;

po::variables_map optMap;

po::parsed_options parsed = po::command_line_parser(argc, argv)
.options(optionalParams)
.allow_unregistered()
.run();

po::store(parsed, optMap);

po::notify(optMap);

}
catch(po::error e)
{
cout << e.what();
return 0;
}

return 0;
}

最佳答案

当我再次查看代码时,正确浏览了 boost 代码后,答案变得更加明显。

catch(po::error e)
{
cout << e.what();
return 0;
}

应该是

catch(po::error& e)
{
cout << e.what();
return 0;
}

没有引用,我们得到“对象切片”,这里有很好的解释:

Catching exceptions by reference

不使用引用意味着我们失去了进行模板替换的重写“what”方法。

关于c++ - Boost program_options 异常不替换 %canonical_option% 标签,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13419070/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com