【问题标题】: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 风格的做事方式,需要手动将指针转换为正确的类型,并且不是内存安全的。尽管如此,它偶尔还是有用的。

      【讨论】:

        猜你喜欢
        • 2014-08-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-06-22
        • 1970-01-01
        • 2015-06-22
        • 1970-01-01
        相关资源
        最近更新 更多