공식 릴리스가 오래되어 더 이상 부스트의 최신 버전으로 컴파일되지 않아서 현재 luabind를 사용하고 있습니다. 특히 https://github.com/rpavlik/luabind입니다.luabind :: object의 이상한 문제
나는 그물에서 어디에도 찾을 수없는 매우 이상한 문제를 겪고 있습니다. 나는 그 사건을 매우 간단한 시나리오로 축소 할 수 있었다.
하나 개의 모듈에서 내가 가진 것
luabind::object value;
void functionA() {
lua_pushstring(L,"yo");
luabind::object temp(luabind::from_stack(L,-1));
value = temp;
}
을 다른 모듈에서 내가 가진 것 : 나는 루아에서 functionA 및 functionB 사용할 수 있도록하면
void functionB() {
printf("My Value: %s\n",luabind::object_cast<const char*>(value));
printf("My Original value type: %d\n",luabind::type(value));
value.push(L);
luabind::object a1(luabind::from_stack(L,-1));
printf("My Copy value type: %d\n",luabind::type(a1));
}
을하고 연속적으로 그들에게 전화, 출력은 것 be :
My Value: yo
My Original value type: 4
My Copy value type: 0
여러분도 알다시피, 객체는 여전히 루아 바인드가 할 수있는 것을 참조합니다. 인쇄. 하지만 스택에 밀어 넣고 스택 개체에서 새 개체를 만들려고하면 결과가 무효가됩니다.
이 경우에만 발생합니다. 모든 것을 하나의 함수에 넣으면 잘 작동합니다. 코드를 같은 모듈의 함수에 넣으면 잘 작동합니다. 독립형 테스트 프로젝트를 아직 만들지는 못했지만, 내 코드를 간섭하는 것으로 생각할 수 없다. 함수는 루아에서 직접 연속적으로 호출된다.
내가 잘못 했나요? 아니면이 버그입니까? 그리고 그것이 버그라면, 나는 이런 식으로 들어 본 적이 없다.
Luabind를 제거하고 Lua C API를 사용하여 테스트 케이스를 단순화 할 수 있다면 궁금 할 것입니다. (분명히 할 수 있습니다 - 복사/붙여 넣기 -하지만 흥미로운 "버그" 루아 또는 루아 바인드에서). –
@ 존 Zwinck : 가능성이 아니라, 루아 바인드에 의해 래핑 된 클래스를 사용하여 보는 것은 버그를 일으키는 전제 조건입니다. luabind에 의해 래핑 된 클래스에 함수를 두는 방법을 이해하려고하는지 (함수 자체는 래핑 할 필요가 없음) 동작을 변경시킬 수 있는지 알고 싶지 않습니다. – cib