我的程序(prog.exe
)相互排斥的選項設置支持以下四個標誌:-P
,-p
,-b
和-s
。但是:的升壓方案選擇
-b
和-p
必須一起指定,構成一組,並且具有數字值例如-b 42
-s
不能與上述組指定,並且反之亦然-P
是在這兩種情況下
這樣prog.exe
只能運行如任一
prog.exe -P -s
或
強制性prog.exe -P -b -42 -p 8
有沒有辦法在boost程序選項中指定上述互斥命令行選項集?
我的程序(prog.exe
)相互排斥的選項設置支持以下四個標誌:-P
,-p
,-b
和-s
。但是:的升壓方案選擇
-b
和-p
必須一起指定,構成一組,並且具有數字值例如-b 42
-s
不能與上述組指定,並且反之亦然-P
是在這兩種情況下這樣prog.exe
只能運行如任一
prog.exe -P -s
或
強制性prog.exe -P -b -42 -p 8
有沒有辦法在boost程序選項中指定上述互斥命令行選項集?
您應該從幾個教程[1][2]開始瞭解boost::program_options
如何工作。
然後,您可以定義兩個相互排斥的選項,只需定義一個小函數,如real.cpp中所述。例如,您可以指定兩個互相沖突(或視)選項定義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 + "'.");
}
}
,然後調用後boost::program_options::store()
conflicting_options (vm, "quiet", "verbose");
好吧,我還是如果它不理解可以定義兩個互斥的位置選項,但這應該是另一個問題。
這是在boost :: program_options客戶端應用程序的恕(恕)''parseOptions()'方法中實現的邏輯的一部分。 – 2013-03-22 18:10:41
我遇到過這種情況,通常將它們映射到某些「程序執行模式」枚舉選項。我第一次查找這個選項設置和確定後,繼續具體的選項... – 2013-03-22 18:15:35