Như tôi vừa mới nhận ra, bạn có thể xác định hai lựa chọn loại trừ lẫn nhau chỉ đơn giản là xác định một hàm nhỏ như được giải thích trong real.cpp. Ví dụ, bạn có thể chỉ định hai lựa chọn mâu thuẫn xác định một hàm conflicting_options()
:
void conflicting_options(const boost::program_options::variables_map & vm,
const std::string & opt1, const std::string & opt2)
{
if (vm.count(opt1) && !vm[opt1].defaulted() &&
vm.count(opt2) && !vm[opt2].defaulted())
{
throw std::logic_error(std::string("Conflicting options '") +
opt1 + "' and '" + opt2 + "'.");
}
}
và sau đó gọi
conflicting_options (vm, "quiet", "verbose");
ngay sau khi boost::program_options::store()
Kiểm tra rằng --myoption
bằng myvalue1
hay myvalue2
sau đó chỉ cần trở thành một vấn đề của một cuộc gọi hàm.
Tôi vẫn không hiểu liệu có thể xác định hai tùy chọn vị trí loại trừ lẫn nhau hay không, nhưng đó phải là một câu hỏi khác.
Chẳng phải đây chỉ là so sánh chuỗi sao? Giả sử chúng là cả hai 'std :: string', bạn có thể làm' if ((arg == myvalue1) || (arg == myvalue2)) '. –
chắc chắn, nó hoạt động, nhưng tôi cần một cái gì đó tích hợp hơn trong 'chương trình-tùy chọn' (ví dụ nó có thể thay đổi thông báo trợ giúp), ví dụ làm việc với non-string –
Bạn có thể muốn giải thích thêm về những gì bạn muốn làm, nó không rõ ràng. –