Есть ли какая-нибудь библиотека / источник c ++, похожая на boost program_options, но для * помощи автоматического генерирования сочетания клавиш *? - PullRequest
1 голос
/ 29 сентября 2011

Итак, у меня есть некоторый исходный код на c ++ с привязками клавиш, например:

  switch( keypressed )
{
case 'c':
  cam_handle->Yaw(min_angle );
  break;
case 'd':
  cam_handle->Yaw( -min_angle );
  break;
case 's':
  cam_handle->Pitch(min_angle );
  break;
case 'x':
  cam_handle->Pitch( -min_angle );
  break;
case 'z':
  cam_handle->Roll( min_angle );
  break;
case 'a':
  cam_handle->Roll( -min_angle );

Я всегда забываю, что это за глупые ключи, и мне приходится их угадывать, они могут измениться, или добавляются новые ключи и т. Д.Есть ли какой-нибудь быстрый способ автоматически сгенерировать справку или всплывающее окно с «руководством для идиота», в котором говорится, что такое ярлыки?Если кто-то не знает boost :: program_options, но может ответить, вот пример этого:

int options(int ac, char ** av, Options& opts) {
// Declare the supported options.
po::options_description desc("Allowed options");
desc.add_options()
  ("help", "Produce help message.")
  ("width,w", po::value<int>(&opts.frameWidth)->default_value(640),"frame width")
  ("height,h", po::value<int>(&opts.frameHeight)->default_value(480),"frame height")
  ("port,p", po::value<string>(&opts.port)->default_value("5001"),"port");

 po::variables_map vm;
 po::store(po::command_line_parser(ac, av).options(desc).allow_unregistered().run(),vm);
 po::notify(vm);

 if (vm.count("help")) {
  cout << desc << "\n";
  return 1;
 }

 return 0;
}

Итак, мне не нужно «RTFC», чтобы знать, как использовать исполняемый файл, япросто скажите «./myapp --help», и boost имеет автоматически сгенерированную помощь и все такое.Есть ли что-то подобное для сочетания клавиш, где нажатия клавиш заменяют роль флагов командной строки?(В C ++ это так. В принципе, с C тоже все в порядке, но я сомневаюсь, что он может быть таким же элегантным, как и буст.)

1 Ответ

1 голос
/ 29 сентября 2011

На мой взгляд, это две разные пары обуви. Если вам нравится создавать и отправлять документацию о вашем приложении, я думаю, что было бы не лучшим сделать его доступным с помощью опции --help. Это может быть хорошо для небольших программ, но boost::program_options, безусловно, не лучший способ справиться с этим.

Если вы хотите сделать переключатель --help, вам нужно найти аргументы argc и argv для вашей функции main:

int main(int argc, char** argv)
{
    for(int i = 0; i < argc; ++i)
    {
        if(std::string(argv[i]) == "--help")
        {
            // TODO print usage keys and quit
        }
    }
    ...
}

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

...