은 내가 여기도움말/내가 지금까지 무엇을
typedef int (*lua_CFunction) (lua_State *L);//target sig
일치 할 필요는이 기능의 서명이있어 기능
오류 1 오류 C2664 : 'lua_pushcclosure' 을 변환 할 수 없습니다 '부스트 :: 기능'에서 에 매개 변수 2 'lua_CFunction'
사람은 누구나이 해결 될 수있는 방법을 알아?
은 내가 여기도움말/내가 지금까지 무엇을
typedef int (*lua_CFunction) (lua_State *L);//target sig
일치 할 필요는이 기능의 서명이있어 기능
오류 1 오류 C2664 : 'lua_pushcclosure' 을 변환 할 수 없습니다 '부스트 :: 기능'에서 에 매개 변수 2 'lua_CFunction'
사람은 누구나이 해결 될 수있는 방법을 알아?
이것은 직접 해결할 수 없습니다. 루아 API는 평범한 함수 포인터를 원한다. 이것은 단지 코드 포인터 일 뿐이며, 다른 것은 없다. 한편, boost::function
은 함수 객체이므로 코드를 캡처하는 것이 아니라 상태를 캡처하기 때문에 일반 함수 포인터로 변환 할 수있는 방법은 없습니다. 귀하의 예제에서 캡처 된 상태는 self
의 값입니다. 따라서 코드와 일부 데이터에 대한 코드 포인터가 있으며 대상 API는 코드 포인터 만 기대합니다.
방금 게시 한 답변을 읽어보십시오. 나의 원래 의혹은 (당신이 func ptr이 주를 붙잡을 수 없다는 점에서) 당신과 비슷하지만, 그것은 훌륭한 마술을 통해서 가능하다는 것이 밝혀졌습니다. – jameszhao00
아니, 틀렸어. Boost 문서 (http://www.boost.org/doc/libs/1_37_0/doc/html/boost/function_base.html#id2623958-bb)에서 : "template
http://lists.boost.org/Archives/boost/2008/12/145709.php –
암시 적 변환이 있기 때문에 컴파일러는 템플릿 매개 변수를 추론 할 수 없다는 문제가 있습니다.
함수 포인터를 함수 개체에 저장해야합니다.
function<int(lua_State *)> f = boost::bind(&LuaEngine::testFunc, this)
registerFunction<LuaEngine>("testFunc", f);
함수에 void 반환 유형이 필요하며 int로 변경해야합니다.
리턴 유형을 int로 변경했습니다. 처음에는 그것을 잊어 버렸습니다. – jameszhao00
위의 내용이 작동하지 않는다고 말하는 것입니까? 아니면 작동합니까? – jameszhao00
내가 제공하는 예제가 작동해야합니다. 귀하의 예를 들어 작동하지 않는 이유입니다. 혼란에 대해 유감스럽게 생각합니다. – leiz
'boost :: function'을 일반 C 포인터로 변환하는 것과 같은 일반적인 문제를 다루는보다 광범위한 질문 : http://stackoverflow.com/questions/282372/demote-boostfunction-to-a-plain-function- 포인터 –