【发布时间】:2016-08-31 19:44:01
【问题描述】:
我有这段工作代码可以创建某种类型的实例。
typedef Constructible = {
public function new(entity:Entity):Void;
}
下面的函数只是让脚本对象关联到一些Entity。所有脚本都继承自BehaviorScript。
所以T 可以是Walk 其中class Walk extends BehaviorScript {}。
// INSIDE OF A CLASS
@:generic
public static function register<T:(Constructible, BehaviorScript)>(type:Class<T>, entity:Entity):T{
var script = new T(entity);
entity.addScript(script);
return script;
}
我希望将函数生成的所有脚本的类型存储在以类型为键的映射中。
// Walk, Attack, Evade classes extend from BehaviorScript
var e = createEntity();
var scriptA = register(Walk, e);
var scriptB = register(Attack, e);
var scriptC = register(Evade, e);
// ISSUE: what to put as key?
var map = new Map<?type as key?, BehaviorScript>();
map.set(Type.getClass(scriptA), scriptA);
map.set(Type.getClass(scriptB), scriptB);
map.set(Type.getClass(scriptC), scriptC);
最终目标是通过类型访问脚本,想想 Unity 的 getComponent<T>(也许有更好的方法)
getScript<T:BehaviorScript>(type:Class<T>):Null<T>{
return map.get(type);
}
有没有在容器中存储受限泛型类型的解决方案?
【问题讨论】:
标签: generics types constraints haxe