d解包为指针
原文
可这样:
template Includes(Args...)
{
template Recurse(Arg...)
{
import std.meta: AliasSeq;
static if (1 == Arg.length)
alias Recurse = AliasSeq!(Arg[0]*);
else
alias Recurse = AliasSeq!(Arg[0]*, Recurse!(Arg[1..$]);
}
alias Includes = Includes!(Args);
}
void view_it(Args...)(void function(entity_t, Includes!(Args) cb)) {...}
可以用静映射
,这里把每个类型变成指针
.
import std.meta;
alias Args = AliasSeq!(int, string, double);
struct Includes { alias args = Args; }
struct entity_t {}
alias PointerTo(T) = T*;//指针
void view_it(void function(entity_t, staticMap!(PointerTo, Includes.args) ) cb)
{
// 干活.
}
但是,不会在view_it
模板原始代码中工作,因为参数列表中有staticMap
,会阻止编译器
自动推导模板参数
.
因此,这里,最好使回调
类型全泛化
,并用模板约束
来强制执行
要求:
import std.meta: allSatisfy;
import std.traits: isPointer;
void view_it(Callback)(Callback cb)
if (
is(Callback == void function(entity_t, Args), Args...)
&& allSatisfy!(isPointer, Args)
)//约束
{
// 干活
}
这里是引用
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现