12.6.8.3 관리 타입(Managed Types)

12.6.8.3 관리 타입(Managed Types)

역사적으로 커스텀 hx::Object 하위 클래스를 extern하는 올바른 방법이 없었습니다. 표준 extern 클래스를 사용할 수는 있지만, 이들에 대해 GC 읽기/쓰기 배리어가 생성되지 않아 다양한 GC 기능에 대해 건전하지 않습니다. 관리 타입 extern은 마침내 커스텀 hx::Object 하위 클래스를 Haxe로 올바르게 가져오는 방법입니다.

class Foo : public hx::Object {};
@:cpp.ManagedType
extern class Foo {
    function new():Void;
}

function main() {
    final f = new Foo();
}

관리 타입 extern은 제한이 거의 없으며 대부분의 경우 일반 Haxe 클래스처럼 사용되고 행동할 수 있습니다.

플래그(Flags)
StandardNaming

각 Haxe 클래스에 대해 컴파일러는 두 개의 C++ 타입, 즉 hx::ObjectPtr 하위 클래스와 hx::Object 하위 클래스를 생성하며, hx::Object 하위 클래스 이름에 _obj 접미가 붙습니다.

class Foo {}
class Foo : public hx::ObjectPtr {};

class Foo_obj : public hx::Object {};

커스텀 hx::Object 하위 클래스가 이 명명 규칙을 따르면 StandardNaming 플래그를 사용할 수 있고 _obj 접미가 자동으로 추가됩니다.

class Foo_obj : public hx::Object {};
@:cpp.ManagedType({ flags : [ StandardNaming ] })
extern class Foo {}
세부 사항(Details)
상속(Inheritance)

표준 Haxe 클래스는 관리 타입 extern을 상속할 수 없습니다. 이는 Haxe와 C++에서 super 호출이 작동하는 방식의 차이 때문이며, 이 제한은 미래에 수정될 수 있습니다.

출처: Managed Types

더 알아보기