Skip to content

Commit 0f0f283

Browse files
committed
update
1 parent cf5e43d commit 0f0f283

File tree

9 files changed

+247
-314
lines changed

9 files changed

+247
-314
lines changed

README.md

Lines changed: 7 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,12 @@
11
# cmdline
22

3-
> 基于 C++23 的命令行解析库,API 见名知意,单 import
4-
5-
[English](README.md) - 简体中文
6-
7-
[文档](docs/api.md) - [API 参考](docs/api.md#类型一览) - [示例](examples/)
3+
> 一个简单的命令行解析库/框架 - `import mcpplibs.cmdline;`
84
95
使用 C++23 模块的类型安全命令行解析库。流式链式接口,零样板代码。支持位置参数、短/长选项、子命令、全局标志,以及基于 `std::expected` 的错误处理。
106

117
## ✨ 特性
128

13-
- **C++23 模块**`import cmdline`
9+
- **C++23 模块**`import mcpplibs.cmdline`
1410

1511
- **流式接口** — 链式构建方法,所见即所得的 API
1612

@@ -20,13 +16,13 @@
2016

2117
- **类型安全结果**`std::expected<ParsedArgs, std::string>`
2218

23-
- **多种解析模式** — 支持 `argc/argv``cmdline::Args`(即 `vector<string>`)或原始 `string_view`
19+
- **多种解析模式** — 支持 `argc/argv``cmdline::Argv`(即 `vector<string>`)或原始 `string_view`
2420

2521
## 快速开始
2622

2723
```cpp
2824
import std;
29-
import cmdline;
25+
import mcpplibs.cmdline;
3026

3127
using namespace mcpplibs;
3228

@@ -43,15 +39,7 @@ int main(int argc, char* argv[]) {
4339
std::println("输入文件: {}", p.positional(0));
4440
});
4541

46-
auto result = app.parse(argc, argv);
47-
if (!result) {
48-
if (result.error() == "help requested" || result.error() == "version requested")
49-
return 0;
50-
std::println("Error: {}", result.error());
51-
return 1;
52-
}
53-
app.run(*result);
54-
return 0;
42+
return app.run(argc, argv);
5543
}
5644
```
5745
@@ -75,15 +63,14 @@ auto app = cmdline::App("demo")
7563
.arg("target").required()
7664
.action([](const cmdline::ParsedArgs& a) { std::println("remove: {}", a.positional(0)); });
7765
78-
auto result = app.parse(argc, argv);
79-
if (result) app.run(*result);
66+
app.run(argc, argv);
8067
```
8168

8269
### 多种解析模式
8370

8471
```cpp
8572
auto r1 = app.parse(argc, argv);
86-
auto r2 = app.parse_from(cmdline::Args{"myapp", "add", "x", "1.0"});
73+
auto r2 = app.parse_from(cmdline::Argv{"myapp", "add", "x", "1.0"});
8774
auto r3 = app.parse_from("myapp remove x --yes");
8875
```
8976

docs/api.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,7 @@
5858

5959
```cpp
6060
import std;
61-
import cmdline;
61+
import mcpplibs.cmdline;
6262

6363
int main(int argc, char* argv[]) {
6464
using namespace cmdline;

examples/basic.cpp

Lines changed: 2 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import std;
2-
import cmdline;
2+
import mcpplibs.cmdline;
33

44
using namespace mcpplibs;
55

@@ -16,13 +16,5 @@ int main(int argc, char* argv[]) {
1616
std::println("Input: {}", p.positional(0));
1717
});
1818

19-
auto result = app.parse(argc, argv);
20-
if (!result) {
21-
if (result.error() == "help requested" || result.error() == "version requested")
22-
return 0;
23-
std::println("Error: {}", result.error());
24-
return 1;
25-
}
26-
app.run(*result);
27-
return 0;
19+
return app.run(argc, argv);
2820
}

examples/parse_from_string.cpp

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import std;
2-
import cmdline;
2+
import mcpplibs.cmdline;
33

44
using namespace mcpplibs;
55

@@ -16,8 +16,9 @@ int main() {
1616

1717
auto result = app.parse_from("tool add --verbose");
1818
if (!result) {
19-
std::println("Parse error: {}", result.error());
20-
return 1;
19+
if (result.error().is_error())
20+
std::println("Parse error: {}", result.error().message);
21+
return result.error().is_error() ? 1 : 0;
2122
}
2223
app.run(*result);
2324
return 0;

examples/with_dispatch.cpp

Lines changed: 2 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import std;
2-
import cmdline;
2+
import mcpplibs.cmdline;
33

44
using namespace mcpplibs;
55

@@ -20,14 +20,5 @@ int main(int argc, char* argv[]) {
2020
.arg("target").required()
2121
.action([](const cmdline::ParsedArgs& args) { std::println("remove: {}", args.positional(0)); });
2222

23-
auto result = app.parse(argc, argv);
24-
if (!result) {
25-
if (result.error() == "help requested" || result.error() == "version requested")
26-
return 0;
27-
std::println("Error: {}", result.error());
28-
return 1;
29-
}
30-
31-
app.run(*result);
32-
return 0;
23+
return app.run(argc, argv);
3324
}

0 commit comments

Comments
 (0)