Fuchsia OS > Guides > Syslog有以下示例:
#include "src/lib/fsl/syslogger/init.h"
#include "src/lib/fxl/command_line.h"
int main(int argc, char** argv) {
auto command_line = fxl::CommandLineFromArgcArgv(argc, argv);
fsl::InitLoggerFromCommandLine(command_line, {"my_program"});
}Fuchsia OS > Reference没有列出FXL:

对紫红色工程场地的搜索还有一个有fxl::CommandLineFromArgcArgv()的示例。
在哪里可以找到参数、返回值和fxl::CommandLineFromArgcArgv()上的其他详细信息
发布于 2020-04-19 18:32:15
fxl API并没有作为官方的Fuchsia引用的一部分进行记录(目前为止)。
来自fxl目录(链接)中的自述文件:
在理想的世界中,FXL是不存在的,我们可以使用C++标准库的构建块。..。我们希望将FXL保持较小,并将重点放在“修复”C++标准库的问题上,这意味着您可能不应该将您的东西放在FXL中,除非它与C++标准库的特定缺陷有关。
基于这一声明,fxl似乎不是作为一个长期项目设置的,而是意味着在C++标准库已经充分适应的情况下成为空/过时的。由于这个原因,文件工作可能受到限制。
我们必须依赖直接在标头(链接)中提供的文档:
// Builds a |CommandLine| from the usual argc/argv.
inline CommandLine CommandLineFromArgcArgv(int argc, const char* const* argv)CommandLine类在同一个标头中定义。根据注释,它区分了可选的和位置的args。可选参数的形式是--key=value或--key (没有值),但不是--key value。位置参数以非此形式的第一个参数(或特殊的--分隔符)开头。
CommandLine成员函数是:
argv[0]):
bool has_argv0() const;const std::string& argv0() const;Option是一个简单的结构,成员为std::string name / std::string value):
const::Vector&Options() const;const std::vector& positional_args() const;我们可以编写以下示例程序(使用结构化绑定语法):
#include <iostream>
#include "src/lib/fxl/command_line.h"
int main(int argc, char** argv) {
const auto cl = fxl::CommandLineFromArgcArgv(argc, argv);
std::cout << "Program name = " << cl.argv0() << std::endl;
std::cout << "Optional: " << cl.options().size() << std::endl;
for (const auto& [name,value] : cl.options()) {
std::cout << name << " -> " << value << std::endl;
}
std::cout << "Positional: " << cl.positional_args().size() << std::endl;
for (const auto& arg : cl.positional_args()) {
std::cout << arg << std::endl;
}
return 0;
}编译程序之后(基于这答案),我们可以获得以下输出(演示第一个位置参数filename如何将以下所有参数转换为位置参数):
$ hello_world_cpp --k1=v1 --k2 --k3=v3 filename --k4=v4
Program name = hello_world_cpp
Optional: 3
k1 -> v1
k2 ->
k3 -> v3
Positional: 2
filename
--k4=v4演示--作为分隔符:
$ hello_world_cpp --k1=v1 -- --k2=v2
Program name = hello_world_cpp
Optional: 1
k1=v1
Positional: 1
--k2=v2我们可以使用HasOption进行简单的参数解析。
size_t index;
if (cl.HasOption("key", &index)) {
handle_key(cl.options.at(index).value);
}将其添加到我们的程序并使用--key=abc调用它,然后将abc传递给handle_key。
https://stackoverflow.com/questions/60642617
复制相似问题