문제

C ++ 클래스에 대해 LUA 바인딩을 할 때 테이블 또는 사용자 데이터 객체를 반환해야합니까?

각 방법에 대한 장단점을 아는 사람이 있습니까?

도움이 되었습니까?

해결책

userData를 반환하는 것이 좋습니다. 접근 방식에 관계없이 C ++ 데이터 또는 실제 C ++ 데이터 자체에 대한 포인터를 넣을 수있는 곳이 있어야하며 테이블과 함께이를 수행하는 데 안전한 곳이 없습니다.

반환 테이블은 어떤 상황에서는 의미가 있습니다. 이는 LUA에서 '주석을 달라'할 수 있기 때문입니다. 불행히도 C ++ 객체 포인터는 어딘가에 가야하며 테이블 자체의 실제 항목 이외의 다른 곳은 없습니다.

이것은 갈 수있는 매우 안전한 장소가 아닙니다. LUA 코드에서 찾을 수 있으며 제거 또는 교체 할 수 있습니다. 이것은 우연이거나 의도적으로 중요하지 않을 수 있습니다.

따라서 선호하는 것은 userData 객체를 반환하는 것입니다. 실제로 그것을 주장해야한다면 테이블처럼 작동하도록 만들 수 있지만, LUA 코드에 의해 덮어 쓰지 않고 C ++ 객체 포인터를 저장할 수있는 "비밀"영역 (실제 사용자 데이터 자체)도 있습니다.

(userData 객체에는 객체 별 데이터를 저장할 수있는 또 다른 장소 인 "환경"포인터도 있습니다. userData 페이로드 자체와 마찬가지로이 값은 LUA 코드에 액세스 할 수 없으며 그러한 방식으로 손상 될 수 없습니다.)

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top