boostorg / boostorg/program_options

options cannot be stored in variables

Đang mở
#68 1 bình luận 0 reaction 0 người được giao Xem trên GitHub
Ngôn ngữ chính
C++
Star
136
Fork
117
Chỉ số merge pull request
Không có pull request nào được merge trong 30 ngày

Mô tả

It seems like storing options in variables doesn't work.

Sample code (based on tutorial):
```C++
#include
using namespace boost::program_options;

#include
using namespace std;

/* Auxiliary functions for checking input for validity. */

/* Function used to check that 'opt1' and 'opt2' are not specified
at the same time. */
void conflicting_options(const variables_map& vm,
const char* opt1, const char* opt2)
{
if (vm.count(opt1) && !vm[opt1].defaulted()
&& vm.count(opt2) && !vm[opt2].defaulted())
throw logic_error(string("Conflicting options '")
+ opt1 + "' and '" + opt2 + "'.");
}

/* Function used to check that of 'for_what' is specified, then
'required_option' is specified too. */
void option_dependency(const variables_map& vm,
const char* for_what, const char* required_option)
{
if (vm.count(for_what) && !vm[for_what].defaulted())
if (vm.count(required_option) == 0 || vm[required_option].defaulted())
throw logic_error(string("Option '") + for_what
+ "' requires option '" + required_option + "'.");
}

int main(int argc, char* argv[])
{
try {
string ofile;
string macrofile, libmakfile;
bool t_given = false;
bool b_given = false;
string mainpackage;
string depends = "deps_file";
string sources = "src_file";
string root = ".";

options_description desc("Allowed options");
desc.add_options()
// First parameter describes option name/short name
// The second is parameter to option
// The third is description
("help,h", "print usage message")
("output,o", value(&ofile), "pathname for output")
("macrofile,m", value(¯ofile), "full pathname of macro.h")
("two,t", bool_switch(&t_given), "preprocess both header and body")
("body,b", bool_switch(&b_given), "preprocess body in the header context")
("libmakfile,l", value(&libmakfile),
"write include makefile for library")
("mainpackage,p", value(&mainpackage),
"output dependency information")
("depends,d", value(&depends),
"write dependencies to ")
("sources,s", value(&sources), "write source package list to ")
("root,r", value(&root), "treat as project root directory")
;

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

if (vm.count("help")) {
cout << desc << "\n";
return 0;
}

conflicting_options(vm, "output", "two");
conflicting_options(vm, "output", "body");
conflicting_options(vm, "output", "mainpackage");
conflicting_options(vm, "two", "mainpackage");
conflicting_options(vm, "body", "mainpackage");

conflicting_options(vm, "two", "body");
conflicting_options(vm, "libmakfile", "mainpackage");
conflicting_options(vm, "libmakfile", "mainpackage");

option_dependency(vm, "depends", "mainpackage");
option_dependency(vm, "sources", "mainpackage");
option_dependency(vm, "root", "mainpackage");

cout << "two = " << vm["two"].as() << "\n";
cout << "depends = " << depends << "\n";
cout << "depends = " << vm["depends"].as() << "\n";
}
catch (exception& e) {
cerr << e.what() << "\n";
}
}
```

And here is an example console printout:
```
$ ./Gmame.exe -p e -d fg
two = 0
depends = deps_file
depends = fg
```

It seems like the provided storage variable is just being ignored? If this is incorrect somehow then the tutorial needs to be updated as well.

Building using boost 1.68 on Windows using MSVC 2017.

Hướng dẫn đóng góp

Chưa lập chỉ mục được hướng dẫn đóng góp cho kho mã nguồn này

Hướng nghiên cứu

Bắt đầu với điểm vào chính được cung cấp và tái hiện ví dụ dòng lệnh bằng Boost 1.68 trên MSVC 2017. So sánh các biến được liên kết, chẳng hạn như depends, với các giá trị variables_map tương ứng và kiểm tra hướng dẫn của tutorial về các biến lưu trữ. Công việc được xem là hoàn tất khi hành vi đã được giải thích và được sửa hoặc ghi lại rõ ràng, đồng thời ví dụ tạo ra các giá trị nhất quán.

Do mô hình lập chỉ mục viết ra từ nội dung của issue.

Đánh giá

Công nghệ
cpp
Lĩnh vực
cli
Loại issue
Lỗi
Độ khó
3/5
Thời gian dự kiến
1-2 ngày
Mức độ hoạt động
Đình trệ
Độ rõ ràng
Khá rõ ràng
Mức phù hợp với người mới
45/100

Nhận issue mới trong hộp thư của bạn

Bản tóm tắt ngắn những issue GitHub phù hợp với người mới.