1

だから、私は次のようなキーバインディングを持ついくつかの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もOKですが、ブーストのものと同じくらいエレガントであるとは思えません。)

4

1 に答える 1

1

私の意見では、これらは2つの異なる靴のペアです。--helpアプリケーションに関するドキュメントを作成して出荷したい場合は、オプションを介してアクセスできるようにするのが最善ではないかもしれません。小さなプログラムでは問題ないかもしれませんがboost::program_options、これに対処する最善の方法ではありません。

--help切り替えを行う場合は、関数の引数argcargv引数を調べる必要があります。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
        }
    }
    ...
}

理想的な方法は、キーを構成可能にし、それに応じたキーを使用してアクションを構成ファイルに保存し、アプリケーションで解釈することです。そのため、ユーザーはアプリケーションで使用可能なアクションをいつでも確認でき、それらを構成することもできます。

于 2011-09-29T09:28:33.403 に答える