gpt4 book ai didi

c++ - Boost 程序选项 - 从函数结果传递 arg 名称

转载 作者:行者123 更新时间:2023-11-28 01:43:51 25 4
gpt4 key购买 nike

我已经根据 the official tutorial 中的示例重现了我的问题.

#include <string>
#include <boost/program_options.hpp>
#include <iostream>

namespace po = boost::program_options;
using namespace std;

const char* withAlias(const char* name, const char* alias)
{
return (string(name) + "," + alias).c_str();
}

int main(int argc, char** argv)
{
po::options_description desc;
const auto name = withAlias("compression", "c");
desc.add_options()
(name, po::value<int>(), "compression bla bla"); // this doesn't work
("compression,c", po::value<int>(), "asdasdasd"); // this works

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

if (vm.count("compression"))
cout << "Compression set to " << vm["compression"].as<int>() << endl;
else
cout << "Compression not set" << endl;
return 0;
}

当我运行我的程序:my_bin --compression 5 时,它抛出一个错误,指出:无法识别的选项“--compression”

当我根本不使用别名时(又名 ("compression", ...)),这会按预期工作。

当名称字符串中有 , 时会发生这种情况,但只有当它不是作为字符串文字传递时才会发生。

无法真正弄清楚是什么原因造成的。

最佳答案

const char* withAlias(const char* name, const char* alias)
{
return (string(name) + "," + alias).c_str();
}

std::string 对象被销毁时,您的字符串指针将失效。

你需要保留 std::string ,像这样:

std::string withAlias(std::string name, std::string name)
{
return name + "," + alias;
}

int main(int argc, char** argv)
{
po::options_description desc;
auto name = withAlias("compression", "c");

desc.add_options()
(name.c_str(), po::value<int>(), "compression bla bla");
...

关于c++ - Boost 程序选项 - 从函数结果传递 arg 名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46028140/

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