gpt4 book ai didi

c++ - boost::option_description 获取默认值

转载 作者:行者123 更新时间:2023-12-01 15:03:15 24 4
gpt4 key购买 nike

我需要从 boost::program_options::option_description 获取默认值类(class)。

我检查了源代码,看起来它都将默认值存储为 std::stringboost::any , 但它存储在私有(private) m_default_as_text ,所以我无法从那里提取此信息。

我能得到的只是这样的格式化参数

arg (=10)



但我只想得到 10 个。

我也可以得到默认值 boost::any调用 value_semantic::apply_default方法
boost::any default_value;
opt_ptr->semantic()->apply_default(default_value)

但我不知道确切的类型 boost::any_cast当我迭代 option_description收藏,我只想打印。

更新
namespace po = boost::program_options;

po::options_description descr("options");

descr.add_options()
("help,h", "produce help message")
("a", po::value<int>()->default_value(42));

for (auto opt: descr.options())
{
std::cout << opt->format_parameter() << std::endl;
}

在这里打印

arg (=42)



我想在没有类型知识的情况下将 42 作为字符串。

有什么办法吗?

最佳答案

您可以只使用(调用商店后):

if(vm["a"].defaulted())
{
//the value for a was set to the default value
std::string a_1 = vm["a"].as<std::string>();

//the other option is to get the int and lexical_cast it
std::string a_2 = boost::lexical_cast<std::string>(vm["a"].as<int>());
}
else
{
//vm["a"] was not defaulted
//So, why would you need to know the default value?
}

另一种选择(也是更好的方法)是使用 boost::lexical_cast 将 int 转换为字符串(将值设置为 参数 而不是 魔数(Magic Number) ):
constexpr int dv_a = 42;
//if (using C++11)

//const int dv_a = 42;
//if you are not using C++11

po::options_description descr("options");

descr.add_options()
("help,h", "produce help message")
("a", po::value<int>()->default_value(dv_a));

std::string string_dv_a = boost::lexical_cast<std::string>(dv_a);

关于c++ - boost::option_description 获取默认值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19795021/

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