如何使用带有来自父Haxe类实例的偏移量的Vector?

时间:2017-07-12 10:45:17

标签: arrays haxe

有哪些方法可以实现从另一个类访问父实例Vector单元?

我的问题是关于用“??”评论的行:

class Test {
    static function main() {
        var a:A = new A();
        var b:B = new B(a, 115);
    }
}

class A {
    public var cells:haxe.ds.Vector<Float>;

    public function new() {
        cells = new haxe.ds.Vector(1000);
    }
}

class B {
    public var a:A; // the "parent"
    public var my_offset:Int;
    public var my_cells:haxe.ds.Vector<Float>; //??

    public function new(a:A, offset:Int) {
        my_offset = offset;
        my_cells[2] = 0.5; //?? actually a.cells[my_offset + 2];
    }

}

是否可以:

  • 直接访问父矢量内存?
  • 使用宏?
  • 使用摘要?

"Try Haxe" link

1 个答案:

答案 0 :(得分:3)

您可以创建一个包裹abstract的{​​{1}}类型,通过定义@:arrayAccess() methods自动添加所需的偏移量:

Vector

注意:抽象不一定需要包装结构,它也可以是一个类。你不能直接包装class Main { static function main() { var cells = new haxe.ds.Vector(1000); cells[115] = 1.5; var cellsWithOffset = new VectorWithOffset(cells, 115); trace(cellsWithOffset[0]); // 1.5 } } abstract VectorWithOffset<T>(VectorWithOffsetData<T>) { public function new(vector:haxe.ds.Vector<T>, offset:Int) { this = {vector: vector, offset: offset}; } @:arrayAccess inline function get(i:Int):T { return this.vector[i + this.offset]; } @:arrayAccess inline function set(i:Int, v:T):T { return this.vector[i + this.offset] = v; } } typedef VectorWithOffsetData<T> = { var vector:haxe.ds.Vector<T>; var offset:Int; } ,因为Vector需要存储在某个地方,而摘要不能有自己的成员变量。