关于cpp标签。此模式通常与参数化有关,并且可以使用模板在C ++中实现。我的主要查询是这是否在C ++和AVM2中是一种逻辑上可解决的模式(我认为它不是指定的),并且首选使用haxe解决它。通常,用Haxe编写的特定代码示例和查询以逻辑上相同的方式编译为相关的C ++目标。

我在询问是否有解决此模式的方法:


参数化逻辑
还有其他一些维护方法
除了靠近的下一个属性外的自由对象的链接
直接类型成员访问的最佳实现为
所述下一个属性的实现(例如,避免对访问next成员的反射/切换调用)
我知道还有其他
合并实现,这不是我要的。


题:

似乎没有办法为从自身已合并的Class扩展的Class定义参数化的池,因为子类不能符合Poolable_i接口,因为它不能重新定义next属性。这是一个有效的结论吗?


  即:Pool_pointer<Destination>不能存在,因为Destination
  无法符合Pool_pointer<Destination>中指定的任何有用约束


例如:

Poolable_i<T> is a base that hase a single property next:T
Point3d implements Poolable_i<Point3d>
Destination extends Point3d {
    public var time:Time;
}


这也假定您不希望使用本身已参数化的基类,例如Point3d_base<T:{Poolable_i<T>,Point3d_base}>,因为您可能需要深度大于1的层次结构。

当然,可以像我打算的那样通过预处理以多种方式解决。我只是想知道我是否缺少关于所述模板实施的某些东西。

package test.shared;
class Pool_pointer<T:Poolable_i<T>> implements Pool_i<T> {
    public var free:T;
    public function new() {
    }
    public function destroy():Void {
    }
    public inline function get():T {
        var r:T=null;
        if(free==null) {
            r=new T();
        } else {
            r=free;
            free=r.next;
        }
        return r;
    }
    public inline function put(v:T):Void {
        v.next=free;
        free=v;
    }
}

最佳答案

解决方案是根据功能声明参数化整个层次结构,并为具体实现创建typedef /特定类。

Destination_base<NextT> -> Destination extends Destination_base<Destination>
^
|
Point3d_base<NextT> -> Point3d extends Point3d_base<Point3d>


实现层次结构已参数化。啊。爱你的预处理。

10-06 12:44