私は現在、通常のオプションgetopt
を取得する必要があるC++プロジェクトに取り組んでいますが、動詞ベース(systemctl
はサブコマンドを使った良い例です)です。どうすればいい? (注:それができる場合、これは最小限のアプリケーションは、それが最善だろうネイティブLLVM C/C++の代わりにライブラリの使用)動詞ベースのargvをC++で解析する
-3
A
答えて
1
手動std::strcmp()
を使用してオプションを解析することができますすることができます
int main(int, char** argv)
{
try
{
enum class verb_type {none, start, stop, restart, status};
verb_type verb = verb_type::none;
std::string service;
for(auto arg = argv + 1; *arg; ++arg)
{
if(verb == verb_type::none)
{
if(!std::strcmp(*arg, "--help"))
{
print_help();
return EXIT_SUCCESS;
}
else if(!std::strcmp(*arg, "start"))
verb = verb_type::start;
else if(!std::strcmp(*arg, "stop"))
verb = verb_type::stop;
else if(!std::strcmp(*arg, "restart"))
verb = verb_type::restart;
else
throw std::runtime_error("unknown operation: " << std::string(*arg));
}
else // get noun
{
service = *arg;
if(!is_service(service))
throw std::runtime_error("Unrecognized service: " + service);
}
}
// use verb & service here....
}
catch(std::exception const& e)
{
std::cerr << e.what() << '\n';
return EXIT_FAILURE;
}
catch(...)
{
std::cerr << "Unknown exception." << '\n';
return EXIT_FAILURE;
}
return EXIT_SUCCESS;
}
をあなたが好き、あなたは非getoptの引数が開始された教えてoptind
を使用する場合も、手を前に、通常のgetopt
オプション処理を実行します。
// start where getopt ends
for(auto arg = argv + optind; *arg; ++arg)
{
// ... etc ...
+0
オプションがどこで終了するかを理解する方法を教えてくれてありがとう。それは私の問題をかなり解決します。 – FireFaced
関連する問題
- 1. プロローグでargvを解析する方法
- 2. コマンドライン引数/ argvを解析する
- 3. C++からのPythonスクリプトへのスペースでのargvの解析
- 4. cのargvをUNIXのコマンドに構文解析します。
- 5. 入力argv jsonの文字列を解析する
- 6. C++の動的コード解析
- 7. C++でargvをクリアする
- 8. argvを解析中にCでstrsepを使用する変数が機能しない
- 9. 動的に変化するjsonファイルをC#で解析する
- 10. Cで手動でJSONメッセージを解析する
- 11. C#コードで解析/リファクタリングするC#コード
- 12. XML Objective Cで子要素の解析を解析します
- 13. ARGVを使用して引数を解析する正しい方法
- 14. C#の解析の理解
- 15. Cでのバイナリデータの解析
- 16. C#、XmlDocument.LoadXmlでWebページを解析する
- 17. C++でXML要素を解析する
- 18. C#でJSONレスポンスを解析する
- 19. Objective cでXMLファイルを解析する
- 20. JSONをC#で解析する
- 21. C++でテンプレートファイルを解析する
- 22. C#でXMLファイルを解析する
- 23. Objective-CでJSONを解析する
- 24. プレーンCで.pcapファイルを解析する
- 25. スクリプト言語でC#を解析する
- 26. HTTPリクエストラインをCで解析する
- 27. C#でunix時間を解析する
- 28. C#でXMLを解析する
- 29. C#でテキストファイルを解析する方法
- 30. C++でコマンドツリーを解析するには?
チェックを[ '後押し:: program_options'](http://www.boost.org /doc/libs/1_64_0/doc/html/program_options.html) –
@πάνταῥεῖこれはオプションではありません。最小限のアプリケーションなので、できるだけ外部の図書館を避けたいのです。 – FireFaced
_ "...最小限のアプリケーションであるから..." _あなたが自分のものをすべて実装しようとすれば、それはすぐに1にならないかもしれません。 –