2010-10-08 72 views
2

我想将以下结构作为类成员,但我不知道T的类型,所以我需要在运行时“声明”结构。在运行时声明类成员D


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

class FileBla { 
    this() { 
     Chunk !int ck; // need to be turned in a class member 
    } 
} 

应该缺少一些容易。

回答

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

我假设你已经习惯了在动态语言编程,并正在努力学习静态语言。

有至少有三个合理的方式来做到这一点:

模板FileBla,太:

class FileBla(T) { 
    Chunk!T ck; 

    // Other stuff. 
} 

在多态类裹块。

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