2014-04-12 2 views
1

lua_pushcfunction (lua 5.2 사용)을 사용하려고합니다. 나는 구조체 내가 lua_pushcfunction(lua_state, hand.readAll)를 사용하고 error: argument of type 'int (readFunctions::)(lua_State*)' does not match 'lua_CFunction {aka int (*)(lua_State*)}'|C++ 클래스에있는 함수를 다른 함수에 전달

가 어떻게 함수에 클래스에서 메소드를 통과 할 수

class readFunctions { 
    private: 
     std::ifstream file; 

    public: 
     static int readAll(lua_State*); 
}; 

int readFunctions::readAll(lua_State *L){ 
    std::string line; 
    std::string nam; 
    while (std::getline(file, line)) { 
     nam = nam + line; 
    } 

    std::cout << nam; 

    return 1; 
} 
readFunctions hand; 

있나요?

답변

1

당신이 인스턴스를 필요가없는, 그래서

lua_pushcfunction(lua_state, & readFunctions::readAll); 

READALL가 정적 인 시도; 함수가 아니라 그 주소를 필요로합니다 (함수는 값과 같습니다. 그래서 pushcfunction에 주소를 주어야합니다). 그러나 컴파일러가 을 int (*)(lua_State*)으로 받아 들일지는 기억이 나지 않습니다. 지금은 테스트 할 수는 없다고 생각합니다.

정적 메서드는 필요하지 않지만 일반 메서드는 메서드가 개체 (클래스 인스턴스)의 일부이므로 호출하려면 this 포인터가 필요합니다. 그건 효과가 없을거야. 하지만 작동 할 수있는 일은 정적 인 readFunctions::readAll을 사용하는 것이지만이 함수를 호출 할 때 첫 번째 매개 변수는 호출하려는 readFunctions 인스턴스 인 간단한 사용자 데이터가 될 수 있습니다.

+0

나는 그 사실을 잊어 버렸습니다. 정적 인 경우 파일에 액세스 할 수 없습니다. 정적으로 만들지 않고도 할 수있는 방법이 있습니까? – user3103398

+0

@ user3103398 업데이트 됨 – Schollii

관련 문제