我正在使用boost::program_options來解析命令行參數。我希望我的程序能夠將輸入的參數回顯給用戶進行驗證。這聽起來像一個簡單的任務,但我無法找到一個優雅的解決方案。Echo在Boost中輸入命令行參數
問題是用戶可以輸入各種數據類型(字符串,整數,布爾值等)。通常這是通過提升很好地處理。但我有麻煩將這些值重新輸入到字符串中,以便將它們回顯給用戶。
以下是我目前在做
// set up program options
po::options_description optdesc("Allowed options");
optdesc.add_options()
("help", "Produces this help screen")
("opt1", po::value<string>(), "Option 1")
("opt2", po::value<int>(), "Option 2")
("opt3", po::value<bool>(), "Option 3);
// parse command line
try
{
po::store(po::parse_command_line(argc, argv, optdesc), cmdline);
po::notify(cmdline);
}
// do error handling ...
// echo parameters back to user
for (po::variables_map::iterator it = cmdline.begin(); it != cmdline.end(); ++it)
{
boost::any arg = it->second.value();
if (typeid(string) == arg.type())
{
cout << " " << it->first << ": " << boost::any_cast<string>(it->second.value()) << endl;
}
else if (typeid(int) == arg.type())
{
cout << " " << it->first << ": " << boost::any_cast<int>(it->second.value()) << endl;
}
// etc...
我真的不喜歡這種解決方案。由於Boost能夠將用戶輸入從字符串轉換爲合適的值,因此它應該能夠將值轉換回字符串表示,而不需要明確測試數據類型。
這可能嗎?如果是的話,我該怎麼做。
感謝
感謝您的建議。當然,這是實現它的簡單方法。然而,這只是我試圖歸檔的一個最簡單的例子。有些情況下,這不是一個理想的解決方案:一個這樣的例子是,如果其中一個解析值作爲一個向量給出。 當然,我可以簡單地迴應數據,但它感覺不對。如果Boost做了所有沉重的舉動,他肯定有可能利用這一點。 – Compuholic