есть ли какая-то библиотека/источник С++, похожая на boost program_options, но для * справки по автоматическому генерированию сочетаний клавиш *?

Итак, у меня есть источник С++ с привязками клавиш, например:

  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 тоже в порядке, но я сомневаюсь, что он может быть таким же элегантным, как и материал Boost.)


person peter karasev    schedule 29.09.2011    source источник
comment
Если у вас есть какие-либо необходимые параметры, вы должны запустить свой код параметра справки перед po::notify(vm), так как он обрабатывает ошибки, такие как отсутствующий параметр. Поскольку в вашем примере их нет, ваш код в порядке. Но есть на что посмотреть.   -  person rcollyer    schedule 06.10.2011


Ответы (1)


На мой взгляд, это две разные пары обуви. Если вам нравится создавать и отправлять документацию по вашему приложению, я думаю, что не лучшим решением будет сделать ее доступной через опцию --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
        }
    }
    ...
}

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

person Constantinius    schedule 29.09.2011
comment
плюс 0,5, округлено :-) Похоже, нет простого пути. Файл конфигурации имеет смысл, я думаю, я просто подумал, может быть, есть автоматически сгенерированный создатель всплывающих окон, чтобы показать привязки клавиш. Конфигурационный файл ненамного лучше, чем если бы он был жестко закодирован, поскольку С++ предназначен для распространения людьми, которые могут читать С++ и интегрировать его куда-нибудь, а не писать приложение с нуля. - person peter karasev; 02.10.2011
comment
Arr, это вернулось, чтобы укусить меня по-крупному .... начал сотрудничать с парнем, использующим немецкую раскладку клавиатуры, файл конфигурации или что-то в этом роде является обязательным, потому что теперь мы спорим о том, являются ли z, x или y, x + /- переключает и r, t, y против r, t, z как клавиши вращения по трем осям - всем нужны логически соседние клавиши! - person peter karasev; 15.11.2011