关于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>
实现层次结构已参数化。啊。爱你的预处理。