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

时间:2010-10-08 15:04:01

标签: 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
    }
}

应该遗漏一些简单的东西。

2 个答案:

答案 0 :(得分:8)

你也可以模板这个类:

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

答案 1 :(得分:2)

我假设你习惯于用动态语言编程,现在正在尝试学习静态语言。

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

模板FileBla也是:

class FileBla(T) {
    Chunk!T ck;

    // Other stuff.
}

在多态类中包装Chunk。

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

相关问题