我從How to accept empty value in boost::program_options得到了部分解決方案,它建議在那些可能有或沒有參數的參數上使用implicit_value方法。 所以,我呼籲初始化「亮度」參數是這樣的:
("brightness,b", po::value<string>()->implicit_value(""),
然後我迭代變量圖和這是一個字符串的任何說法,我檢查它是否是空的,如果是這樣我打印的當前值。該代碼看起來是這樣的:
// check if we're just printing a feature's current value
bool gotFeature = false;
for (po::variables_map::iterator iter = vm.begin(); iter != vm.end(); ++iter)
{
/// parameter has been given with no value
if (iter->second.value().type() == typeid(string))
if (iter->second.as<string>().empty())
{
gotFeature = true;
printFeatureValue(iter->first, camera);
}
}
// this is all we're supposed to do, time to exit
if (gotFeature)
{
cleanup(dc1394, camera, cameras);
return 0;
}
UPDATE:這改變了上述語法,使用隱式的價值觀,現在爭論的時候,給的時候,一定是這樣的形式:
./dc-ctl -b500
,而不是
./dc-ctl -b 500
希望這對別人有幫助。