d匹配模板类型结构实例

原文

import core.stdc.stdio;

Test!(T, "mode1") make_test(T)(T data) {
  Test!(T, "mode1") t = { data };

  return t;
}

struct Test(T, string mode = "ref") { T data; }

extern (C) void main() {
  auto obj = make_test(20);
  static if (is(typeof(obj) == Test)) { printf("YES!!!!!!!\n"); }
}

我可以:

static if (is(typeof(obj) == Test!(int, "mode1"))) { printf("YES!!!!!!!\n"); }

这样:

static if (is(typeof(obj) == Test!T, T)) { printf("YES!!!!!!!\n"); }
//超过1个模板参数,要求括号

多参,这样:

static if (is(typeof(obj) == Test!Args, Args...))

还可这样:

import std.traits;
static if (isInstanceOf!(Test, typeof(obj))) { printf("YES!!!!!!!\n"); }
//这样.

现在,可简化日志为:

struct LOG(T...) {
  T[0] id;
  T[1] data;
}

void main()
{
   auto obj = //make_test(20);/*
              make_test('T');//*/

  alias typ = //typeof(obj);/*
        LOG!(int, char);//*/

  "Type: ".write;

  if(isInstanceOf!(LOG, typ)/*
    is(typ : Template!Args,
    alias Template, Args...)//*/
  ) "LOG".writeln;
}
posted @   zjh6  阅读(7)  评论(0编辑  收藏  举报  
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示