예, 기존의 내 보낸 클래스에 새로운 메소드를 추가 할 수 있습니다.
Foobar는 일반 테이블이므로 다른 테이블처럼 메소드를 연결할 수 있습니다. [1]
Foobar["extra_method"] = function (self, arg1, arg2) print(arg1, arg2) end
을 지금 당신은 할 수 있습니다 :
Foobar:extra_method(1,2)
및 1 2
가 표시됩니다.
[1] tolua ++는 다소 이상하게 작동합니다. 클래스의 정적 멤버 함수 (예 : Foobar:new()
) 및을 클래스의 인스턴스 멤버 함수 (예 : Foobar:method1()
)로 유지하는 Foobar로 표시되는 각 클래스에 대해 하나의 메인 테이블을 만듭니다. lua에있는 :
연산자는 통 신당입니다. a:b()
은 a.b(a)
으로 변환됩니다. 즉, Foobar:new()
에 전화하면 Foobar:new(Foobar)
으로 바뀌므로 self
인수는 Foobar 테이블입니다. Foobar 유형의 객체를 만든 다음 method1()을 호출하면 self
이 해당 객체가됩니다. 따라서 새 메서드 method3
을 Foobar 테이블에 추가하면 Foobar:method3()
및obj = Foobar:new(); obj:method3()
을 사용할 수 있지만 이전에는 오류가 발생합니다. 따라서,이 대답 는 tolua ++에서만 작동합니다.
편집 : 나를 여기에 실제 코드를 사용하자 주석에게
를 해결합니다.그래서 우리가 보인다는 foobar의 클래스 선언이 있다고 가정하자 같은 :
class Foobar {
public:
void method1();
static void method2();
};
tolua는 ++ (이
- 새로운 다음과 같은 방법으로 당신에게 표를 줄 것이 클래스 루아 바인딩 코드를 생성 할 때) -
Foobar:new()
으로 전화하여 Foobar의 인스턴스를 만듭니다.
- delete() - 으로 전화하여 Foobar의 인스턴스를 삭제합니다.
- method1() -
instance:method1()
으로 호출하여 인스턴스에서 method1을 실행합니다.
- method2() - 방법 2를 실행하려면
Foobar:method2()
이라고 부릅니다.
그러나 tolua ++는 실제로 두 개의 다른 테이블을 사용하지 않습니다 (클래스 자체에 첨부해야하는 메소드와 클래스의 인스턴스 메소드에 하나씩). 대신,이 두 가지를 병합하므로 Foobar:method1()
과 instance:new()
을 실행할 수 있습니다. 비록 방법을 사용해야하는 것은 아니지만. 따라서 정적 메서드를 사용하는 방법과 인스턴스 메서드를 사용하는 방법에는 차이가 없습니다. 구문 학적으로도 동일합니다. 설명에 대한
obj = Foobar:new()
print(obj:method1())
obj:delete()
감사합니다 : 당신이 루아 내에서이 함수를 호출 할 방법 (. 나는 개인적으로이 ++ tolua에 문제가 있다고 생각)
당신이 예를 찾는 경우가 여기에있다. 정적 메소드가 호출되는 방법과 인스턴스가 호출되는 방법의 차이는 여전히 명확하지 않습니다. 나는 Foobar라는 클래스에서 메소드 호출을 추측하고 있습니다 : static_method() 및 foobarvar : instance_method()? – skyeagle
기존 C++ 메소드를 덮어 쓸 수 있습니까? 어쨌든 C++ 메소드를 READONLY (즉, C++ 메소드가 할당으로 덮어 쓰지 않도록하려면?) – skyeagle
예, 기존 C++ 메소드를 동일한 방식으로 겹쳐 쓸 수 있습니다. 기존 메소드의 이름을 사용하면됩니다. 읽기 전용 테이블을 만드는 것은 간단하고 절대적이지 않습니다. 여기를 참조하십시오 : http://lua-users.org/wiki/ReadOnlyTables –