Templates 在运行时在D中声明类成员

Templates 在运行时在D中声明类成员,templates,class,struct,d,Templates,Class,Struct,D,我希望以下结构作为类成员,但我不知道t的类型,因此我需要在运行时“声明”该结构 struct Chunk (T) { string id; T[][] data; } class FileBla { this() { Chunk !int ck; // need to be turned in a class member } } 应该缺少一些简单的内容。您也可以为类设置模板: import std.stdio; struct Chunk

我希望以下结构作为类成员,但我不知道
t
的类型,因此我需要在运行时“声明”该结构


struct Chunk (T) {
    string id;
    T[][] data;
}

class FileBla {
    this() {
        Chunk !int ck; // need to be turned in a class member
    }
}
应该缺少一些简单的内容。

您也可以为类设置模板:

import std.stdio;

struct Chunk (T) {
    string id;
    T[][] data;
}

class FileBla(T) {
private:
    Chunk!T ck;
}

void main() {
    auto f = new FileBla!int;
    writeln(typeid(f.ck));
}

我假设您已经习惯了用动态语言编程,现在正在尝试学习静态语言

至少有三种合理的方法可以做到这一点:

模板文件bla也是:

class FileBla(T) {
    Chunk!T ck;

    // Other stuff.
}
在多态类中包装块

在堆上分配块并存储指向它的
void*
指针。这是旧的C风格的做事方式,需要手动将指针转换为正确的类型,而且内存不安全。尽管如此,它偶尔还是有用的