原文

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);
}