d初化模板构造器
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);
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现