12.6.7.11 CPP0010 - 타입 매개변수를 해석할 수 없음(Unable to Resolve Type Parameter)
12.6.7.11 CPP0010 - 타입 매개변수를 해석할 수 없음(Unable to Resolve Type Parameter)
설명(Description)
일반 haxe 객체의 타입 매개변수는 타입 삭제(type erasure)를 사용하지만, 네이티브 마셜링 타입의 타입 매개변수는 C++ 템플릿 매개변수를 나타냅니다. 이 차이 때문에 타입 매개변수는 그 구체적인 타입으로 해석 가능해야 합니다. Haxe가 그렇게 할 수 없으면 이 오류가 생성됩니다.
이 문제를 해결하려면 Haxe가 매개변수를 해석할 수 있게 하는 타입 힌트나 타입 검사를 명시적으로 추가해야 합니다.
예제(Examples)
다음 예제는 CPP0010을 생성합니다.
@:semantics(value)
@:cpp.ValueType
extern class Foo {
function new():Void;
function bar<T>():T;
}
function main() {
final f = new Foo();
trace(f.bar()); // CPP0010
}
trace는 첫 번째 인자로 Dynamic을 받아들이므로 Haxe의 타입 추론이 T를 유니파이할 대상이 없어 이 오류가 발생합니다. 다음 두 예제는 이 오류를 해결하는 방법입니다.
@:semantics(value)
@:cpp.ValueType
extern class Foo {
function new():Void;
function bar<T>():T;
}
function main() {
final f = new Foo();
trace((f.bar() : Int)); // Type check to allow Haxe to resolve T with Int.
}
@:semantics(value)
@:cpp.ValueType
extern class Foo {
function new():Void;
function bar<T>():T;
}
function main() {
final f = new Foo();
final v : Int = f.bar(); // Variable with type hint to allow Haxe to resolve T with Int.
trace(v);
}