2016-02-10 43 views
2

我剛剛發現了chaiscript,我非常喜歡它。 現在我想添加對我非常簡單的opengl 3d引擎的支持。如何檢查一個函數是否在chaiscript中定義,以及如何使用類型化參數執行它?

我有C++數學類:vec2T,vec3T,vec4T,mat2T,mat3T,mat4T,...(其實都是模板類和有類型定義,使他們vec4i,vec4f,vec4d,...)

我想我可以把他們一起chaiscript:

chai.add(chaiscript::user_type<vec4i>(), "vec4i"); 

吧?

現在,我想測試,如果我的腳本中含有一種叫「onFrame」功能。如果是這樣,我想用vec4i參數作爲它的第一個參數來調用它。 我該怎麼做?

我知道我可以做這樣的事情:

try 
{ 
    chai("onFrame();"); 
} 
catch (const std::exception &) 
{ 
} 

如果onFrame沒有在腳本中定義,異常會被這樣忽視。我甚至可以通過這種方式傳遞一些整數或字符串參數。 但我該如何繼續傳遞一個vec4(x,y,z,w)參數?

任何幫助表示讚賞!

回答

3

似乎有實際上是幾個問題在這裏。

您可以user_type類型名稱添加到ChaiScript,但你仍然需要補充的是,你要使用的任何方法。

既然你提到他們是模板類型,我建議增加在你身邊一個模板功能,可將你想爲你的每個模板實例。

是的,你是正確的,捕捉異常會自動忽略的功能不存在。但是,在實踐中,如果你真的在每一幀都這樣做,運行時將會受到影響。拋出/捕獲異常是昂貴的。

您有可能會如何去傳遞你的vec4i對象的功能很多選擇。例如,你想從C++還是在ChaiScript中執行它?

一種選擇是做一個強類型的方式,從C++

auto func = chai.eval<std::function<void (const vec4i &)>>("onframe"); 
func(somevector); 

我建議找過cheatsheet,看它是否回答剩下的問題。

+0

謝謝。沒有注意到有一張備忘單。網站上有鏈接嗎? – scippie

+0

@scippie只是將它添加到主頁面。 – lefticus

相關問題