2012-04-09 76 views
1

最近我一直在學習Luabind,意圖將其集成到我們的軟件中。我遇到了一些問題,我一直在看Luabind的Rasterbar軟件文檔,但一直未能解決它。基本上,我公開了一個函數,它將一個字符串和一個抽象基類作爲參數。首先,我不確定我是否以正確的方式開展這項工作,或者可能需要在lua中進行一些特殊處理才能使其工作。總之,這裏的代碼Luabind:派生類作爲參數

class UIFactory 
{ 
    void addComponentFactory(std::string name, BaseFactory* factory); 
} 

BaseFactory是一個抽象基類,返回在UIComponent(按鈕,文本等),我們得出的工廠叫TemplateFactory基本上可以被實例化,像這樣..

TemplateFactory<Button> buttonFactory = new TemplateFactory<Button>(); 

然後,我們將通過這些在C++中UIFactory這樣的...

uiFactory.addComponentFactory("Buttons", buttonFactory); 
在luabind

...

module(state) 
[ 
    class_<UIFactory>("UIFactory") 
    .def(constructor<>()) 
    .def("AddFactory", &UIFactory::addComponentFactory) 
]; 

和盧阿...

uiFactory = UIFactory() 

buttonFactory = ButtonFactory() 

uiFactory:AddFactory("Button", buttonFactory) 

最後一行不執行,即所創建的按鈕工廠和UI工廠進行,他們是我檢查。有沒有我想念的東西?

非常感謝幫助。

+1

你說的「不執行」的意思嗎?你的意思是說,Lua腳本出錯了,或者你的函數沒有被調用,或者是什麼?你是否證實了(比如說'print'語句)Lua正在那麼遠? – 2012-04-09 16:24:10

+0

我已經驗證了前面的語句「buttonFactory = ButtonFactory()」的作用,所以它必須正在工作到那一點。我對lua和luabind很陌生,所以我不確定如何在沒有通過解釋器運行lua打印功能時運行。 – rocklobster 2012-04-09 16:26:38

回答

1

原來我需要公開的基類到Lua和還指出,buttonFactory衍生

luabind::module(state) 
[ 
    luabind::class_<BaseFactory>("BaseFactory") 
]; 

luabind::module(state) 
[ 
    luabind::class<TemplateFactory<Button>, BaseFactory>("ButtonFactory") 
    .def(constructor<>()) 
] 
相關問題