【问题标题】:Declare class member at runtime in D在 D 中在运行时声明类成员
【发布时间】:2011-04-22 22:51:55
【问题描述】:
我想要以下结构作为类成员,但我不知道T 的类型,所以我需要在运行时“声明”该结构。
struct Chunk (T) {
string id;
T[][] data;
}
class FileBla {
this() {
Chunk !int ck; // need to be turned in a class member
}
}
应该缺少一些简单的东西。
【问题讨论】:
标签:
templates
class
struct
d
【解决方案1】:
你也可以模板类:
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 风格的做事方式,需要手动将指针转换为正确的类型,并且不是内存安全的。尽管如此,它偶尔还是有用的。