きゅぶろぐ

きゅぶんずの ぶろぐができて べんりだな

HaxeからC#にArray<T>を出力したらobject[]になるのを回避したい

Haxeの Array<T> をC#出力すると、 object[] になってしまい、型〜〜〜〜〜〜〜!!!!!ってなるのをどうしたものかと考えました。

この挙動自体は仕様で間違いないらしい
https://github.com/HaxeFoundation/haxe/issues/5434#issuecomment-230581990

要件

  • Haxe, Lua, C#出力が出来る
  • C#で Array<T> で取れる
  • 当たり前ながら、Haxeでも Array<T> で取れる
  • HaxeでSerialize/Deserializeした結果と、C#でSerialize/Deserializeした結果が同じになる

結果

package aprotHx.type;

import haxe.ds.Vector;

@:generic
class ArrayWrapper<T>
{
    public function new() {}

    public var value: Array<T> = [];

    public function toTyped(): Vector<T>
    {
        var v = new Vector<T>(value.length);
        for (i in 0...value.length)
        {
            v[i] = value[i];
        }
        return v;
    }
}

他の案

Conditional Compilationでわける

Serialize/Deserializeした結果が同じになるようにするのが思ったより大変だった http://old.haxe.org/ref/conditionals

Array, Vectorのinterfaceを自力で実装する

あまりに辛い
でも、いつかやるかも

あとがき

もうちょいどうにかならんかな・・・