【问题标题】:template function binding lua模板函数绑定lua
【发布时间】:2017-04-27 08:17:09
【问题描述】:

我在 cocos2dx 中使用 lua。 有一个模板函数,比如:

class ClassA
{
public:
    template<class T1, class T2>
    static ClassA* createClassA(T1 t1, T2 t2);
}

如何将此函数绑定到 lua?

提前致谢,

【问题讨论】:

    标签: templates lua cocos2d-x


    【解决方案1】:

    你不能。您必须绑定单个静态函数int createClassA(lua_State* L);,它将检查实际的 Lua 参数类型,并调用特定的模板方法。意味着本机代码中必须有某种切换,并且所有可能的情况都应在本机主机中实例化。

    【讨论】:

    • 你的意思是没有办法将模板实现从cpp导出到lua?
    • Lua 没有函数签名的概念。这只是一个单一的价值。因此,您需要为不同的模板实例化单独的 Lua 函数,或者您必须通过检查 Lua 参数来选择精确的实例化。无论哪种方式,这是您的责任(或您的 c++ 绑定库/框架),Lua 在这里帮不上忙。
    • 谢谢,如果 lua 参数是用户类型,“或者你必须通过检查 Lua 参数来选择精确的实例化”,有没有...
    • 必须以允许区分类型的方式创建这些用户类型。它可能是用户类型值内已知偏移量处的某个类型 id 字段,或者是关于元表名称/id 或方法的某种协议。如果用户类型不是由您的代码创建的,则您不可能知道该类型最初是什么,因此无法选择确切的模板实例。
    • @I-V,绑定代码是用模板实现的,因此与托管应用程序同时生成/编译。无论如何,问题不在本机方面。 Lua 不关心参数类型,因为参数没有类型,只有绑定到参数变量的实际值才有。所以 Lua 不能自己选择精确的原生函数,它需要有人来完成这项工作。 tolua++ 生成多个绑定,但在 Lua 端,您必须显式调用不同的函数。甚至 tolua++ 目前也无法绑定模板化函数。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-06-14
    • 2011-11-19
    • 2017-07-15
    • 2016-05-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多