2013-12-17 52 views
1

我是新來的luabind,我正在努力尋找一個可能愚蠢的問題的答案。我該如何使用luabind綁定int&f(void)?

比方說,我有這樣的:

int x = 0; 

int& f(void) 
{ 
    return x; 
} 

如何綁定F使用luabind?

簡單

module(L) 
[ 
    def("f", &f) 
]; 

結果時,我調用F()在LUA腳本

Error: std::runtime_error: 'Trying to use unregistered class' 

我想一定有辦法告訴luabind包裝與一些參考這個錯誤註冊類,但我無法找到任何工作

回答

1

東西在Lua是不同的:

x = 123 
function f() return x end 
a = f() 
x = 456 
print(a) -- prints 123 

這意味着你不能直接包裝C++ f()以便在Lua中使用;你不得不問自己這個操作的意義是什麼,你將如何在Lua端使用這個操作,然後在Lua中創建相應的操作。如果修改C++級別是可能的,那麼您將有不同的解決方案。例如:f返回一個對全局的引用,據推測這樣全局可以稍後修改(如果它返回const int &這將是一個不同的問題)。你會如何在Lua中做到這一點?你可以把能夠在表內引用全局變量並返回索引表:

g = {x = 123} 
function f() return 'x' end 
at = f() 
print(at.x) -- prints 123 
g.x = 456 
print(at.x) -- prints 456 

另一種可能性是創建一個表,並設置的metatable這樣做斧子_G取的「X」代替一個。還有其他方法;這真的取決於你的要求。

相關問題