Macros haxe使用自动生成宏递增类ID

Macros haxe使用自动生成宏递增类ID,macros,haxe,Macros,Haxe,我试图在我的组件类上使用一个autoBuild宏,这样每个扩展组件的类都会得到一个递增的ID(0,1,2,3…),问题是haxe似乎缓存了一些文件,所以在重新编译某些类时无法重建,所以假设一些已经构建的类具有ID 0,1和2。现在我创建了一些新类,它们还将获得ID 0、1和2,因为已经构建的类没有被处理,所以它们不会增加ID。因此,我在生成的代码中得到了一些具有相同ID的类 我在autoBuild宏中使用的代码如下: #if (macro) public static function buil

我试图在我的组件类上使用一个autoBuild宏,这样每个扩展组件的类都会得到一个递增的ID(0,1,2,3…),问题是haxe似乎缓存了一些文件,所以在重新编译某些类时无法重建,所以假设一些已经构建的类具有ID 0,1和2。现在我创建了一些新类,它们还将获得ID 0、1和2,因为已经构建的类没有被处理,所以它们不会增加ID。因此,我在生成的代码中得到了一些具有相同ID的类

我在autoBuild宏中使用的代码如下:

#if (macro)
public static function build():Array<Field>
{
    var pos = Context.currentPos();

    var c = macro : {
        override function get_index()
        {
            return $v{componentCounter};
        }

        public static inline var INDEX = $v{componentCounter};
    };

    componentCounter++;

    switch (c)
    {
        case TAnonymous(fields):
            return Context.getBuildFields().concat(fields);
        default:
            throw 'unreachable';
    }
}
#end

public static var componentCounter = 0;
#如果(宏)
公共静态函数build():数组
{
var pos=Context.currentPos();
var c=宏:{
重写函数get_index()
{
返回$v{componentCounter};
}
公共静态内联var索引=$v{componentCounter};
};
componentCounter++;
开关(c)
{
案例TAnonymous(字段):
返回Context.getBuildFields().concat(字段);
违约:
抛出“遥不可及”;
}
}
#结束
公共静态var componentCounter=0;

有什么方法可以让这样的东西起作用吗?

我可能会将其他地方已经使用过的数字存储在一个文件中。为什么首先需要这些ID?@Gama11要以有效的方式检索组件,var physic=world.getComponent(entity,PhysicComponent);变为var physic=this.world.components[2][entity];一个
Map
HashMap
和一些预定义的常量id怎么样?Map/HashMap仍然非常有效。或者,或者类似的东西,以摆脱这种“递增”的需求。