gpt4 book ai didi

c++ - boost 。方便的 variables_map。利用在 options_desctription 中指定的类型

转载 作者:行者123 更新时间:2023-11-30 05:40:07 26 4
gpt4 key购买 nike

在 C++ 中使用 boost/program_options,当我构建 options_description 时,我指定每个选项的类型(在本例中为 fs::path) :

namespace fs = boost::filesystem;
namespace po = boost::program_options;

po::options_description desc("Example");
desc.add_options()
("help", "Print help messages")
("input,i", po::value<fs::path>(), "Input folder");

然后我构建了variables_map

po::variables_map vm;
po::store(po::parse_command_line(argc, argv, desc), vm);

当我访问该选项时,我必须再次指定它们的类型:

vm["input"].as<fs::path>()

不是

vm["input"]

有没有更方便的方法来访问变量映射?不能利用我已经指定存储在 vm 中的 variable_value 类型这一事实来 boost 优势吗?

我看到许多程序员最终将选项存储在另一个变量中

fs::path input = vm["input"].as<fs::path>()

但我想避免定义冗余变量。

最佳答案

这是您可以使用 Storage component of the library 中的 notify 功能的地方.

Live On Coliru

#include <iostream>
#include <fstream>
#include <boost/program_options.hpp>
#include <boost/filesystem.hpp>

namespace po = boost::program_options;

int main(int argc, char** argv) {
namespace fs = boost::filesystem;
namespace po = boost::program_options;

po::options_description desc("Example");

int i = -99; // some value
fs::path v; // the only place where we ever specify the type!

desc.add_options()
("help", "Print help messages")
("value,v", po::value(&i)->default_value(42), "Input folder")
("input,i", po::value(&v)->default_value("TheAnswer"), "Input folder");

po::variables_map vm;
po::store(po::parse_command_line(argc, argv, desc), vm);
notify(vm);

std::cout << i << ", " << v << "\n";
}

这里的转换和类型规范本身都是隐式的。输出:

./test
42, "TheAnswer"

./test -i /temp/path/foo --value=123
123, "/temp/path/foo"

关于c++ - boost 。方便的 variables_map。利用在 options_desctription 中指定的类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31891861/

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