12.6.8.1 값 타입(Value Types)

12.6.8.1 값 타입(Value Types)

extern class 주석 처리된 값 타입은 C++에서 (스택이나 값으로) 값으로 전달되는 타입을 나타냅니다. 컴파일러는 이 타입이 메모리에서 C++의 해당 타입과 정확히 같은 레이아웃을 가진다고 가정합니다. 값 타입 extern은 내부에 포인터가 있더라도 참조 타입(reference type)으로 사용될 수 없습니다.

값 타입으로 선언된 extern 클래스나 enum은 다음 제한을 가집니다:

  • 생성자(new)가 있어야 하며, 이는 선언된 생성자입니다.
  • 정적 메서드는 인스턴스 필드를 수정할 수 있습니다.
  • 인스턴스 메서드는 this를 받습니다.
  • 값 타입은 nullable이 아니며 null이 될 수 없습니다.

값 타입의 namespacetype 필드 외에 유효한 flags는 다음과 같습니다:

  • StackOnly - 이 타입이 힙에 승격되는 것을 금지합니다. 이는 Null<T>, 클래스 필드, Dynamic으로의 변환 등을 금지합니다.
  • NotMutableFields - 필드가 변경 불가능하다는 것을 나타냅니다.
  • NativeStruct - 타입이 C++ 구조체로 표현된다는 것을 나타냅니다.

값 타입 extern의 예:

@:cpp.ValueType({ namespace : [ 'bar' ], type : 'Foo' })
extern class Bar {
    function new():Void;
    function get():Int;
}

출처: Value Types

더 알아보기