import std.traits;
import std.getopt;
struct Options
{
@Option("threads", "t")
@Help("要用线程数")
size_t threads;
@Option("file")
@Help("输入文件")
string[] files;
}
void main(string[] args) {
Options prop;
string GenerateGetopt(alias Options)() pure {
import std.meta;
import std.typecons;
import std.format;
auto ans = `auto helpInfo = getopt(args, `;
static foreach(opt; FieldNameTuple!Options) {
ans ~= format("getUDAs!(prop.%s, Option)[0].cononical(),"
~" getUDAs!(prop.%s, Help)[0].msg, &prop.%s,", opt, opt, opt);
}
return ans ~ ");";
}
mixin(GenerateGetopt!Options);
if (helpInfo.helpWanted)
{
defaultGetoptPrinter("选项: ",helpInfo.options);
}
}
struct Help {
string msg;
}
struct Option {
string[] names;
this(string[] names...) {
this.names = names;
}
string cononical() {
import std.algorithm;
import std.conv;
return names.joiner("|").to!string;
}
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现