当前位置:网站首页>d初化模板构造器
d初化模板构造器
2022-08-09 01:05:00 【fqbqrr】
struct TestArray(ulong element_n) {
int[element_n] elements;
this(string type)(ulong number) {
pragma(msg, "类型为: " ~ typeof(type).stringof);
}
}
//我想创建它并能够成功地初始化,构造函数的模板参数
void main() {
// 不行
auto val = TestArray!(10, "int")(60);
// 不行
auto val = TestArray!(10).TestArray!("int")(60);
// 不行.
auto val = TestArray!(10).this!("int")(60);
}
//
struct TestArray(ulong element_n, string type) {
int[element_n] elements;
this(ulong number) {
pragma(msg, "类型为: " ~ typeof(type).stringof);//Qth
}
}
struct TestArray(ulong element_n, string type) {
int[element_n] elements;
this(ulong number) {
mixin("alias T = " ~ type ~ ";");
pragma(msg, "类型为: " ~ T.stringof);
}
}
//用T类型
struct TestArray(ulong element_n, T) {
int[element_n] elements;
this(ulong number) {
pragma(msg, "类型为: " ~ T.stringof);
}
}
TestArray!(10, "int") val = TestArray!(10, "int")(100);
//或
TestArray!(10, int) val = TestArray!(10, int)(100);
//我将推荐一个别名以使其更容易:
alias IntTestArray = TestArray!(10, int);
...
IntTestArray val = IntTestArray(100);
struct TestArray(ulong element_n) {
int[element_n] elements;
this(type)(type number)
{
pragma(msg, "类型为: " ~ type.stringof);
}
}
auto val = TestArray!10(ubyte(60));
工厂函数:
TestArray!T testarray(string s, T)(T val) {
... // 依赖
return TestArray!T(...) // 构造器.
}
//或这样:
struct StringAnnotated(string s, T)
{
T val;
}
StringAnnotated!(s, T) annotate(string s, T)(T val)
{
return StringAnnotated!(s, T)(val);
}
struct TestArray(ulong element_n)
{
...
this(T)(T val) if (isInstanceOf!(StringAnnotated, T))
{
...
}
}
// use like
TestArray!10(60.annotate!"int");
用辅助函数:
import std.stdio;
struct TestArray(ulong element_n, string type) {
int[element_n] elements;
mixin(type) member;
pragma(msg, "类型为: ", typeof(member));
this(ulong number) {
writeln("用", number,"构建");
}
}
auto makeTestArray(ulong element_n, string type)(ulong number) {
return TestArray!(element_n, type)(number);
}
void main() {
auto ta = makeTestArray!(10, "int")(60);
}
//用嵌套模板
import std.stdio;
template TestArray(ulong element_n) {
struct TestArrayImpl(Type) {
int[element_n] elements;
this(ulong number) {
pragma(msg, "类型为: ", Type);
writeln("用", number,"构建");
}
}
auto makeFor(string s)(ulong number) {
return TestArrayImpl!(mixin(s))(number);
}
}
void main() {
auto ta = TestArray!10.makeFor!"int"(60);
}
边栏推荐
猜你喜欢
vscode 中新建文件自动显示作者,日期等配置
京东三面惨遭被虐,关于 redis,高并发,分布式,问懵了
在Ubuntu/Linux环境下使用MySQL:解决com.mysql.jdbc.PacketTooBigException: Packet for query is too large的问题
轻量化神经网络--MobileNet v3学习记录
Non-major graduates, five-faced Ali: Four rounds of technical + HR have already taken an offer
轻量化网络ChannelNet--channel-wize Conv在channel维度卷积
利用Ehcache分布式缓存,轻松打造商业级高并发、高性能API接口!
Using MySQL in Ubuntu/Linux environment: Modify the database sql_mode to solve the "this is incompatible with sql_mode=only_full_group_by" problem
JD.com was abused on three sides. Regarding redis, high concurrency, and distributed, I am confused.
【元胞自动机】基于元胞自动机模拟社会力因素下的灾害人员疏散应急仿真附matlab代码
随机推荐
如何仿造一个websocket请求?
Non-major graduates, five-faced Ali: Four rounds of technical + HR have already taken an offer
字符串压缩
WPF效果第一百九十四篇之伸缩面板
Early departure, learning source half a year, finally got the ants Offer to share the interview process
jetson nano 开机闪一下然后黑屏
4-8 Matplotlib库 雷达图
字节输入流(InputStream)与字节输出流(OutputStream)
4-1 Matplotlib库 数据分析常用图
知识图谱学习笔记——我的第一次知识图谱实践
<力扣刷题>965. 单值二叉树
论文笔记:SAITS: SELF-ATTENTION-BASED IMPUTATION FOR TIMESERIES
Using MySQL in Ubuntu/Linux environment: Modify the database sql_mode to solve the "this is incompatible with sql_mode=only_full_group_by" problem
轻量级网络SqueezeNet学习记录
微信企业号开发之获取AccessToken
5-2 Seaborn 分类绘图
使用jdbc来处理MySQL的utf8mb4字符集(转)
统一身份管理平台IAM单点登录流程及第三方接口设计方案
The Best Open Source Web Application Firewall to Protect Your Web Applications
《Go语言学习:基本变量与类型》