Каков формат командных строк параметров программы BOOST?

У меня есть два коммутатора, ‘i’ и ‘p’, которые представляют IP-адрес и порт соответственно.

Какой формат командной строки?

Я пытался:

app -i192.168.1.1 -p12345
app -i 192.168.1.1 -p 12345
app -i=192.168.1.1 -p=12345
app -i='192.168.1.1' -p='12345'
app --IPAddress 192.168.1.1 --Port12345

У моего приложения есть проблема с IP-адресом, и устранение неполадок с DDD не выявлено, как я получаю для виртуальной машины.

Кроме того, приложение работает как демон, поэтому мои операторы cout для IP-адреса и порта забываются, а печать в системный журнал затруднена тем фактом, что вывод значений не является const char *.

Я планирую использовать опции программы и для других вещей, но я немного обдумал это.

po::options_description config("Configuration");
config.add_options()
("IPAddress,i","IP Address")
("Port,p","Port")
;
po::variables_map vm;
po::store(po::parse_command_line(ac, av, config),
vm);

po::notify(vm);
//...and this is how the values are used

int retval = getaddrinfo((vm["IPAddress"].as< string >()).c_str(),(vm["Port"].as<string>()).c_str(), &hint, &list);

Вот полная программа … ничего не выводится на консоль после ‘значений’:

#include <sstream>
#include <algorithm>
#include <stdlib.h>
#include <iterator>
#include <string>

//Using boost program options to read command line and config file data
#include <boost/program_options.hpp>
using namespace std;
using namespace boost;
namespace po = boost::program_options;

int main (int argc, char *argv[])
{
po::options_description config("Configuration");
config.add_options()
("IPAddress,i","IP Address")
("Port,p","Port")
;

po::variables_map vm;
po::store(po::parse_command_line(argc, argv, config),vm);
po::notify(vm);

cout << "Values\n";

cout << (vm["IPAddress"].as< string >()).c_str();
cout << " " << (vm["Port"].as<string>()).c_str();

return 0;

}

Являются ли введенные значения как-то непечатными?


Вот вывод GDB, кажется, проблема приведения:

28              string address = (vm["IPAddress"].as< string >()).c_str();
(gdb) n
terminate called after throwing an instance of 'boost::exception_detail::clone_impl<boost::exception_detail::error_info_injector<boost::bad_any_cast> >'
what():  boost::bad_any_cast: failed conversion using boost::any_cast

Program received signal SIGABRT, Aborted.
0x0000003afd835935 in raise () from /lib64/libc.so.6

0

Решение

Опции программы BOOST поддерживают распространенные варианты командной строки, известные в системах Unix.
Таким образом, эти двое должны работать (они работают на меня)

app -i 192.168.1.1 -p 12345
app --IPAddress=192.168.1.1 --Port=12345

Примечания:

  • Документация с базовым руководством на boost.org (вероятно, вы уже знаете это)
  • написание отдельного модульного теста для этого, безусловно, хороший совет; boost также предоставляет простой в использовании тестовый фреймворк для C ++
1

Другие решения

Других решений пока нет …